Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.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,我有一个概要文件模型,它引用了Django的默认用户模型。我想要一个增加点数的用户列表 我的个人资料模型: class Profile(models.Model): username = models.ForeignKey(User, on_delete=None, primary_key=True) image = models.CharField(max_length=255, default="") points = models.IntegerField(defa

我有一个概要文件模型,它引用了Django的默认用户模型。我想要一个增加点数的用户列表

我的个人资料模型:

class Profile(models.Model):
    username = models.ForeignKey(User, on_delete=None, primary_key=True)
    image = models.CharField(max_length=255, default="")
    points = models.IntegerField(default=0)
    views = models.IntegerField(default=0)

    def __str__(self):
        return self.username.username
我提出这个问题:

users = User.objects.filter(username__in=Profile.objects.filter().order_by('-points').values('username__username'))
print(users,Profile.objects.filter().order_by('-points').values_list('username__username'))
我的输出是

<QuerySet [<User: aplha>, <User: baqir>, <User: beta>]> <QuerySet [{'username__username': 'beta'}, {'username__username': 'baqir'}, {'username__username': 'aplha'}]>


现在我们看到,配置文件模型按照我想要的顺序给出用户名,但是用户模型并没有保持这个顺序。如何使其保持与配置文件返回相同的顺序。

在中使用
\u时,无法保证结果的顺序

您可以通过循环浏览配置文件来获取用户列表。如果使用
select_related()
,则可以避免额外的查询来获取每个用户

profiles = Profile.objects.filter().order_by('-points').select_related('username')
users = [p.username for p in profiles]

请注意,最好将外键的
用户名
外键重命名为
用户
,因为外键后面返回的是
用户
实例,而不是
用户名
字符串。

中使用
\u时,无法保证结果的顺序

您可以通过循环浏览配置文件来获取用户列表。如果使用
select_related()
,则可以避免额外的查询来获取每个用户

profiles = Profile.objects.filter().order_by('-points').select_related('username')
users = [p.username for p in profiles]
请注意,最好将外键
用户名
外键重命名为
用户
,因为外键后面返回的是
用户
实例,而不是
用户名
字符串。

这是怎么回事:

from django.db.models import Sum

users = User.objects.annotate(points=Sum('profile__points')).order_by('-points')
这是未经测试,但我希望它有帮助

这个怎么样:

from django.db.models import Sum

users = User.objects.annotate(points=Sum('profile__points')).order_by('-points')

这是未经测试,但我希望它有帮助

无法将关键字“profile\u set”解析到字段中。选项包括:回答、截止日期、加入日期、电子邮件、姓名、组、id、是否活动、是否工作人员、是否超级用户、最后登录、最后登录名、日志项、开启、密码、帖子、个人资料、问题、用户权限、用户名、视图、投票
您能给我一个简短的解释吗?我接受了你的回答。Thanks@BaqirKhan
中的
\u不保证订单将被保留。因为,模型
User
有自己的顺序。这就是为什么,您需要为
用户
模型本身“注释”所需的字段,然后按该字段排序。在您的情况下,该注释是相关
字段的总和。
无法将关键字“profile\u set”解析为字段。选项包括:回答、截止日期、加入日期、电子邮件、姓名、组、id、是否活动、是否工作人员、是否超级用户、最后登录、最后登录名、日志项、开启、密码、帖子、个人资料、问题、用户权限、用户名、视图、投票
您能给我一个简短的解释吗?我接受了你的回答。Thanks@BaqirKhan
中的
\u不保证订单将被保留。因为,模型
User
有自己的顺序。这就是为什么,您需要为
用户
模型本身“注释”所需的字段,然后按该字段排序。在您的例子中,该注释是相关
字段的总和。