【发布时间】:2020-04-23 01:46:50
【问题描述】:
在 Django REST Framework 中创建序列化程序时,我知道我可以创建一个 SerializerMethodField 来为模型创建一个新的只读方法。例如:
class AnswerSerializer(serializers.ModelSerializer):
likes_count = serializers.SerializerMethodField()
class Meta:
model = Answer
exclude = ["a_field"]
def get_likes_count(self,instance):
return instance.voters.count()
类似的事情也可以使用 models.py 文件中的属性或方法来完成:
class Answer(models.Model):
@property
def get_likes_count(self):
return voters.count()
所以我的问题是:
各有什么优缺点?我知道 SerializerMethodField 用于只读操作,但除此之外不确定。
最好的做法是只保留模型字段的 models.py 文件,并使用信号进行更新/创建操作和序列化程序进行读取操作?
【问题讨论】:
-
可以从类的任何实例访问模型上的属性,并且当属性是模型的一个完整属性并且可以/将要从多个不同的视图或序列化程序访问时非常有用。在序列化程序上定义它会将其限制为特定的序列化程序及其子类,如果您不打算将该属性用于其他任何地方,这将很有用
标签: django django-rest-framework django-serializer