Django计算每个用户的关系

时间:2018-05-21 15:33:45

标签: sql django django-models

如何计算每个用户拥有的“朋友”数量,然后按降序显示。

class Friend(models.Model):
    to_friend = models.ForeignKey(User)
    from_friend = models.ForeignKey(User, related_name='owner')

我有计算关系的想法,但我认为这不是一种有效的方法。

for user in User.objects.all():
    user.friend_set.all().count()

2 个答案:

答案 0 :(得分:0)

这是一种有效的方式,因为你不能重复关系(如果你有,你可以使用不同的关系),而count将返回关系的数量。 要命令它们下降,您可以这样做:

query.order_by('-id_user')

答案 1 :(得分:0)

坦率地说,这里看起来很多问题。

除了质疑Model架构之外,我建议你采用一种方法来优雅地做到这一点。

User.objects.prefetch_related('friend_set')

您可以在Django Documentation here.

中了解此prefetch_related

现在,这里有一个问题。上述查询可能会返回重复的Friends。对此的解决方案是Prefetch

from django.db.models import Prefetch
query = Prefetch('friend_set', Friend.objects.distinct())
User.objects.prefetch_related(query)

这实际上会预取Friends的所有唯一Users

现在,关于Count的{​​{1}},我认为这样做 -

unique friends

您可以阅读有关from django.db.models import Count User.objects.prefetch_related(query).annotate(number_of_friends=Count('friend')) here

的更多信息