[在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文件保留为模型字段,并使用信号进行更新/创建操作和使用序列化程序进行读取操作吗?
使用串行器方法而不是@property
方法的一个优点是,您可以在传递给串行器的查询集上使用annotations
annotations
通过这种方式,您可以使用注释来减少所进行的查询的数量,并且仍然可以使用后退方式来计算值