您的位置:首页 > 编程语言 > Python开发

django restframework serializer 增加自定义字段

2018-06-28 11:35 561 查看
在使用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


几点说明:

SerializerMethodFiel是一个read-only字段

当不指定其method_name时,默认为get_<field_name>

如果使用ModelSerializer并指定字段时,要包含此时定义的字段
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: