问题01:Django枚举类型扩展方法(Model.get_FOO_display())
- 问题
# 标准的枚举写法
EXPERIENCE_CHOICES = (
(1, '应届毕业生'),
(2, '3年及以下'),
...
)
# 偷懒的枚举写法
EXPERIENCE_CHOICES = (
('应届毕业生', '应届毕业生'),
('应届毕业生', '3年及以下'),
...
)
原因主要是很多人不会枚举类型的序列化
- 解决办法
问题02:Serializer增加自定义字段
- 问题
# 假设现在有一个Animal模型,其中有name, type, country字段,country为外键。我们在序列化Animal时,需要额外增加外键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并指定字段时,要包含此时定义的字段
- 扩展链接