我已经有一个使用Django Rest Framework公开数据的Django代码库。我有一个字段在序列化器中定义为SerializerMethodField()
:
categories = serializers.SerializerMethodField()
在同一序列化程序中,定义了此get_method:
def get_categories(self,obj):
return [obj.categories.choices[key.upper()] for key in obj.categories]
这行得通,但是我不得不添加一种方法,也可以让用户将新数据发布到api。在模型中,该字段定义为MultiSelectField:
categories = MultiSelectField( choices=CATEGORY_CHOICES,max_length=64,max_choices=6,null=True,blank=True)
由于根据定义,SerializerMethodField
是只读的,因此我将该字段更改为CharField
(因为它是数据库中的varchar):
categories = serializers.CharField(required=True,allow_blank=False,max_length=100)
这适用于发布新内容,但不幸的是,get_categories()
不再被调用。
有人知道如何在保持get_categories()
的情况下调用CharField
方法吗?