ㄒ唬┳┳,forengkey django rest framework?

当我计算赞数时,我从数据库中得到了所有的赞数。我想只计算与文章相关的赞数。

class ArticleSerializer(serializers.ModelSerializer):
    author = UserSerializer(read_only=True)
    comments = CommentSerializer(read_only=True, many=True)
    likes = serializers.SerializerMethodField(read_only=True)


class Meta:
    model = Article
    fields = "__all__"

def get_likes(self, value):
    return Vote.objects.select_related('article').filter(value=True).count()

解决方案:

我想你可以像这样尝试。

def get_likes(self, obj):
    # if you have related_name='votes' in Vote model
    # then it will be obj.votes.count()
    # else
    return obj.vote_set.count()

或者 你可以试一试 高效 解决方案。对于这个更新查询器集。

from django.db.models import Count

class API(ListAPIView):
    queryset = Article.objects.annotate(vote_count=Count('vote'))

并改变序列器。

class ArticleSerializer(serializers.ModelSerializer):
    author = UserSerializer(read_only=True)
    comments = CommentSerializer(read_only=True, many=True)
    likes = serializers.IntegerField(
        source='vote_count', 
        read_only=True
    )

原因是 效率 是它并不是对每一个计数进行数据库查询,而是在查询集评估时做一次。

给TA打赏
共{{data.count}}人
人已打赏
未分类

在大查询中创建表

2022-9-8 16:30:35

未分类

Gitlab EE 12.8.5-ee 终极版禁用了Gitlab pull mirror选项。

2022-9-8 16:30:37

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索