Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django-访问带注释查询中的外键数据_Python_Django - Fatal编程技术网

Python Django-访问带注释查询中的外键数据

Python Django-访问带注释查询中的外键数据,python,django,Python,Django,我正在使用,并按关注者的数量筛选我的用户,如下所示: Relationship.objects.values('to_user').annotate(num_followers=Count('to_user')).order_by('-num_followers') tu_list = [] for tu in top_users_set: tu_list.append({ 'top_user': User.objects.get(pk=tu['to_user']),

我正在使用,并按关注者的数量筛选我的用户,如下所示:

Relationship.objects.values('to_user').annotate(num_followers=Count('to_user')).order_by('-num_followers')
tu_list = []
for tu in top_users_set:
    tu_list.append({
        'top_user': User.objects.get(pk=tu['to_user']),
        'followers': tu['num_followers'],
    })
from django.db.models import Count

users = User.objects.annotate(num_followers=Count('to_users')).order_by('-num_followers')
它返回类似这样的结果

[{'to_user': 1, 'num_followers': 3}, {'to_user': 4, 'num_followers': 1}]
我的问题是我需要访问我的用户对象,而不仅仅是他们的
pk
。现在我正在做这样的事情:

Relationship.objects.values('to_user').annotate(num_followers=Count('to_user')).order_by('-num_followers')
tu_list = []
for tu in top_users_set:
    tu_list.append({
        'top_user': User.objects.get(pk=tu['to_user']),
        'followers': tu['num_followers'],
    })
from django.db.models import Count

users = User.objects.annotate(num_followers=Count('to_users')).order_by('-num_followers')
对每个用户进行查询。因为queryset最终可能会有数百个以上的用户,这可能真的很糟糕

任何有助于改进这一点的意见都将不胜感激


谢谢

如果您想要用户您需要通过查询用户模型和加入关系以另一种方式访问它。这是相关的

应该是这样的:

Relationship.objects.values('to_user').annotate(num_followers=Count('to_user')).order_by('-num_followers')
tu_list = []
for tu in top_users_set:
    tu_list.append({
        'top_user': User.objects.get(pk=tu['to_user']),
        'followers': tu['num_followers'],
    })
from django.db.models import Count

users = User.objects.annotate(num_followers=Count('to_users')).order_by('-num_followers')
这将为您提供用户,每个用户都有一个额外的属性num_followers

model.py

试验


EDIT2修复了拼写错误,添加了测试

如果你想要用户你需要通过查询用户模型和加入关系以另一种方式访问它。这是相关的

应该是这样的:

Relationship.objects.values('to_user').annotate(num_followers=Count('to_user')).order_by('-num_followers')
tu_list = []
for tu in top_users_set:
    tu_list.append({
        'top_user': User.objects.get(pk=tu['to_user']),
        'followers': tu['num_followers'],
    })
from django.db.models import Count

users = User.objects.annotate(num_followers=Count('to_users')).order_by('-num_followers')
这将为您提供用户,每个用户都有一个额外的属性num_followers

model.py

试验


EDIT2修复了拼写错误,添加了测试和您的示例
用户
只是一个带有
{num_followers':5}
的dict更新了我的答案,见上文我认为您在
之前缺少了一个
,但当我添加这个时,queryset没有按照每个用户拥有的追随者数量正确排序。无法更早尝试,您是对的,那里有一个输入错误。请参见Edit2以您的示例
用户
只是一个带有
{'num_followers':5}
更新了我的答案的dict,请参见上文我认为您在
之前缺少了一个
,你说得对,那里有个打字错误。见第2版