首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >django restframework serializer 增加自定义字段

django restframework serializer 增加自定义字段

作者头像
用户1214487
发布2022-03-26 14:30:55
1.5K0
发布2022-03-26 14:30:55
举报
文章被收录于专栏:PythonPython

在使用django restframework serializer 序列化在django中定义的model时,有时候我们需要额外在serializer中增加一些model中没有的字段。有两种方法实现这个目的。

假设现在有一个Animal模型,其中有name, type, country字段,country为外键。我们在序列化Animal时,需要额外增加外键country的area信息。

方法一:

1.首先,在django的model中定义property

class Animal(models.Model):
    name = models.CharField(max_length=50, default='')
    type = models.CharField(max_length=50, default='')
    country = models.ForeignKey(Country, blank=True, null=True)

    @property
    def country_area(self):
        return self.country.area
  

2.然后在定义django restframework的serializer时,使用字段的source参数指向我们上面定义好的property

class AnimalSerializer(serializers.Serializer):
    pk = serializers.IntegerField(read_only=True)
    name = serializers.CharField(max_length=50)
    type = serializers.CharField(max_length=50)
    country = serializers.PrimaryKeyRelatedField(read_only=True)
    country_area = serializers.FloatField(required=False, source='country_area’)

方法二:

不修改django的model,直接使用SerializerMethodField(method_name=None)字段

class AnimalSerializer(serializers.ModelSerializer):
    country_area = serializers.SerializerMethodField()

    class Meta:
        model = Animal
        fields = ('id', 'name', 'type','country','country_area')

    def get_country_area(self, obj):
        return obj.country.area 

几点说明:

  1. SerializerMethodFiel是一个read-only字段
  2. 当不指定其method_name时,默认为get_<field_name>
  3. 如果使用ModelSerializer并指定字段时,要包含此时定义的字段
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-02-27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档