繁体   English   中英

如何在django中使用queryset计算字典的值

[英]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}]>

如果算上每本字典的值,就会分别有1、1、2。 我应该寻找哪个查询集,而不是将它算作没有 for 循环的查询集?

模型.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)

您应该注释目标模型,因此:

from django.db.models import Count

Post.objects.annotate(
    number_of_liked=Count('liked_people')
)

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

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

from django.db.models import Count

Post.objects.filter(
    liked_people__liked_people=
).annotate(
    number_of_liked=Count('liked_people')
)

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

from django.db.models import Count, Q

Post.objects.annotate(
    number_of_liked=Count(
        'liked_people', filter=Q(liked_people__liked_people=)
    )
)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM