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