如何在 Django 中使用查询集计算字典的值

How to count the value of dictionary using queryset in django

我在 django 中使用 .value('post_id') 来获取以下值。

<QuerySet [{'post_id': 3}, {'post_id': 2}, {'post_id': 1}, {'post_id': 3}]>

如果统计每个字典的值,分别是一、一、二。我应该寻找哪个查询集,而不是将其计为没有 for 循环的查询集?

models.py

class Like (models.Model) :
    liked_people = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, null=True)
    post = models.ForeignKey(Post, on_delete=models.CASCADE, related_name='liked_people', null=True)

您应该注释 target 模型,因此:

from django.db.models import <b>Count</b>

Post.objects.annotate(
    <b>number_of_liked=Count('liked_people')</b>
)

由此产生的 Post 个对象将有一个额外的属性 .number_of_liked,其中包含相关 Liked 的数量。

您可以进一步过滤 Like 个对象,例如:

from django.db.models import <b>Count</b>

Post.objects.filter(
    <b>liked_people__liked_people=<i>my_user</i></b>
).annotate(
    number_of_liked=Count('liked_people')
)

这将排除 Post 个与 liked_people=my_user 没有相关 Like 个对象的对象。您也可以包括这些,但随后使用 .number_of_liked = 0,使用:

from django.db.models import <b>Count, Q</b>

Post.objects.annotate(
    number_of_liked=Count(
        'liked_people'<b>,
        filter=Q(liked_people__liked_people=<i>my_user</i>)</b>
    )
)