Dajngo开发常见问题汇总 -- Serializer篇

问题01:Django枚举类型扩展方法(Model.get_FOO_display())

  1. 问题
# 标准的枚举写法
EXPERIENCE_CHOICES = (
  (1, '应届毕业生'),
  (2, '3年及以下'),
  ...
)
# 偷懒的枚举写法
EXPERIENCE_CHOICES = (
  ('应届毕业生', '应届毕业生'),
  ('应届毕业生', '3年及以下'),
  ...
)

原因主要是很多人不会枚举类型的序列化

  1. 解决办法

问题02:Serializer增加自定义字段

  1. 问题
# 假设现在有一个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并指定字段时,要包含此时定义的字段
  1. 扩展链接


posted @ 2023-02-06 19:32  又是火星人  阅读(23)  评论(0编辑  收藏  举报