Django REST Framework SerializerMethodField与Django模型方法

问题描述 投票:0回答:1

[在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
1个回答
0
投票

使用串行器方法而不是@property方法的一个优点是,您可以在传递给串行器的查询集上使用annotations

annotations

通过这种方式,您可以使用注释来减少所进行的查询的数量,并且仍然可以使用后退方式来计算值

© www.soinside.com 2019 - 2024. All rights reserved.