django restframework serializer 增长自定义字段

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

假设如今有一个Animal模型,其中有name, type, country字段,country为外键。咱们在序列化Animal时,须要额外增长外键country的area信息。ui

方法一:spa

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

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参数指向咱们上面定义好的propertycode

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’)

 

方法二:blog

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

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

 

几点说明:class

  1. SerializerMethodFiel是一个read-only字段
  2. 当不指定其method_name时,默认为get_<field_name>
  3. 若是使用ModelSerializer并指定字段时,要包含此时定义的字段
相关文章
相关标签/搜索