【django开发手册】DRF外键模型查询没有信息?教你实现序列化返回

Django专栏

  • 💖 作者简介:大家好,我是Zeeland,全栈领域优质创作者。
  • 📝 CSDN主页:Zeeland🔥
  • 📣 我的博客:Zeeland
  • 📚 Github主页: Undertone0809 (Zeeland) (github.com)
  • 🎉 支持我:点赞👍+收藏⭐️+留言📝
  • 📣 系列专栏:django开发手册🍁
  • 💬介绍:The mixture of software dev+Iot+ml+anything🔥

Django系列专栏

前言

在使用DRF进行开发时,如果遇到外键模型无法正确查询的问题,可能需要手动序列化外键模型的信息。在本文中,我将介绍DRF中如何手动序列化外键模型的信息,并通过一个具体的示例来展示如何实现这一功能。

正文

在DRF中,如果你使用ForeignKey类型的字段在Serializer中进行序列化时,它默认只会返回外键的ID,而不是外键对应的模型的详细信息。因此,你需要像下面这样,手动序列化相关的模型,并将序列化后的结果返回到Serializer当中。

from rest_framework import serializers

class MeasuringPointSerializer(serializers.ModelSerializer):
    project = serializers.SerializerMethodField()
    measuring_item = serializers.SerializerMethodField()
    element_point = serializers.SerializerMethodField()

    class Meta:
        model = models.MeasuringPoint
        fields = ('mpoint_id', 'mpoint_name', 'huasi_id', 'project', 'measuring_item', 'element_point')

    def get_project(self, obj):
        if obj.project_id:
            serializer = ProjectSerializer(obj.project_id)
            return serializer.data
        return None

    def get_measuring_item(self, obj):
        if obj.mitem_id:
            serializer = MeasuringItemSerializer(obj.mitem_id)
            return serializer.data
        return None

    def get_element_point(self, obj):
        if obj.epoint_id:
            serializer = ElementPointSerializer(obj.epoint_id)
            return serializer.data
        return None

在上面的代码中,我们用SerializerMethodField代替了原来的ForeignKey字段,再其对应的方法中序列化相关的模型。在方法中我们使用if obj.xxx_id来判断是否有对应的外键。如果有,我们使用对应的Serializer对其进行序列化,并将结果返回即可。

最后,在MeasuringPointViewSet中使用序列化器生成响应数据即可。

这样就可以解决外键模型查询数据时,返回的结果中没有外键模型信息的问题了。

总结

本文介绍了如何手动序列化外键模型的信息,帮助开发者解决在使用DRF开发时遇到的外键模型查询问题。通过自己手动序列化外键模型信息,不仅可以获得更详细的数据,还可以更加灵活地进行数据处理和返回。希望本文能够对DRF开发者有所帮助。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zeeland

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值