【问题标题】:Is there a way to make a query respect the order of the inputted parameters?有没有办法让查询尊重输入参数的顺序?
【发布时间】:2011-01-15 21:57:37
【问题描述】:

(如果这完全荒谬,请告诉我,这可能是我没有找到任何东西的原因。)

这个故事有两个模型RankingArtistRanking 一般与Artist 相关(object_id, content_type...整个shebang)。

我有一个由Ranking.objects.values_list() 返回的对象列表,按某个字段排序(在我的情况下为score)。所以很明显,如果我想显示一个排名的艺术家列表,我希望他们以相同的顺序排列。我尝试了不同的方法,例如.filter(pk__in=list).in_bulk(list) 等。也尝试将.values_list() 的结果强制转换为一个元组。

他们都拿走了我的清单:

>>> objects = Ranking.objects.filter(<stuff>).order_by('score')
>>> objects_list = objects.values_list('object_id', flat=True)
>>> objects_list
[8, 1, 2, 15, 14, 3, 13, 31, 16, 5, 4, 7, 32, 9, 37]

然后像这样返回它:

>>> Artist.objects.filter(id__in=objects_list).values_list('id', flat=True)
[7, 32, 3, 8, 4, 2, 31, 9, 37, 13, 16, 1, 5, 15, 14]

(为了理智,我只是在第二种情况下提供 ID。)

现在我可以让它工作的唯一方法是创建一个空列表并循环遍历非values_list() 查询。

for item in objects:
    ranked_items.append(item.content_object)

这只会产生n 查询,所以我想知道是否有更好的方法。如标签所示,我使用的是 PostgreSQL。

【问题讨论】:

    标签: django postgresql django-queryset django-orm


    【解决方案1】:

    这不是 Django 造成的;由于未指定顺序,因此您的数据库将按此顺序返回它们。

    【讨论】:

    • 谢谢,我想我的问题是 PostgreSQL 是否支持这个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-10
    • 1970-01-01
    • 2011-07-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多