問題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並指定字段時,要包含此時定義的字段
- 擴展鏈接