微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

django restframework serializer 增加自定义字段

<div id="cnblogs_post_body" class="blogpost-body">

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

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

方法一:

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

= models.CharField(max_length=50,default== models.CharField(max_length=50,default== models.ForeignKey(Country,blank=True,null=@property </span><span style="color: #0000ff;"&gt;def</span><span style="color: #000000;"&gt; country_area(self): </span><span style="color: #0000ff;"&gt;return</span><span style="color: #000000;"&gt; self.country.area

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

= serializers.IntegerField(read_only== serializers.CharField(max_length=50= serializers.CharField(max_length=50= serializers.PrimaryKeyRelatedField(read_only== serializers.FloatField(required=False,source=

方法二:

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

=</span><span style="color: #0000ff;"&gt;class</span><span style="color: #000000;"&gt; <a href="/tag/Meta/" target="_blank" class="keywords">Meta</a>: model </span>=<span style="color: #000000;"&gt; Animal fields </span>= (<span style="color: #800000;"&gt;'</span><span style="color: #800000;"&gt;id</span><span style="color: #800000;"&gt;'</span>,<span style="color: #800000;"&gt;'</span><span style="color: #800000;"&gt;name</span><span style="color: #800000;"&gt;'</span>,<span style="color: #800000;"&gt;'</span><span style="color: #800000;"&gt;type</span><span style="color: #800000;"&gt;'</span>,<span style="color: #800000;"&gt;'</span><span style="color: #800000;"&gt;country</span><span style="color: #800000;"&gt;'</span>,<span style="color: #800000;"&gt;'</span><span style="color: #800000;"&gt;country_area</span><span style="color: #800000;"&gt;'</span><span style="color: #000000;"&gt;) </span><span style="color: #0000ff;"&gt;def</span><span style="color: #000000;"&gt; get_country_area(self,obj): </span><span style="color: #0000ff;"&gt;return</span> obj.country.area </pre>

几点说明:

    一个read-only字段
  1. 当不指定其method_name时,认为get_
  2. 如果使用ModelSerializer并指定字段时,要包含此时定义的字段

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐