如何计算每个用户拥有的“朋友”数量,然后按降序显示。
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()
答案 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