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. 擴展鏈接


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章