gpt4 book ai didi

django - Django 查询集结果的顺序

转载 作者:行者123 更新时间:2023-11-29 12:50:17 26 4
gpt4 key购买 nike

我无法理解为什么查询集会按它的顺序返回。我们为文章列出了作者,这些作者被存储在一个名为:articlepage_authors

的 ManyToMany 表中

我们需要能够逐篇选择它们返回和显示的顺序。

例如,id 为 44918 的文章的作者为 13752(‘Lee Bodding’)和 13751(‘Mark Lee’)。

我在返回的 shell 中调用了这些:

Out[6]: <QuerySet [<User: Mark Lee (MarkLee@uss778.net)>, <User: Lee Bodding (LeeBodding@uss778.net)>]>

在 postgres 中调用它:SELECT * FROM articlepage_authors;

显示用户 Lee Bodding id=13752 最先存储在表中。

id  | articlepage_id | user_id
-----+----------------+---------
1 | 44508 | 7781
2 | 44508 | 7775
3 | 44514 | 17240
….
465 | 44916 | 17171
468 | 44918 | 13752
469 | 44918 | 13751

无论我尝试什么删除作者,添加“Lee Bodding”,保存文章,然后添加“Mark Lee”,反之亦然——我仍然只能得到一个首先返回“Mark Lee”的查询集。

我不确定如何调试它。

一个解决方案是添加另一个定义作者顺序的字段,但我想先了解这里发生了什么。有些东西似乎已经在定义顺序,最好管理它。

最佳答案

您可以添加 an order_by to your queryset使记录按您希望的顺序显示。警告:对于查询优化,出于性能原因,您可能需要在该字段上创建索引,具体取决于数据库:

By default, results returned by a QuerySet are ordered by the ordering tuple given by the ordering option in the model’s Meta. You can override this on a per-QuerySet basis by using the order_by method. Example:

Entry.objects.filter(pub_date__year=2005).order_by('-pub_date', 'headline')

The result above will be ordered by pub_date descending, then by headline ascending. The negative sign in front of "-pub_date" indicates descending order. Ascending order is implied.

您将其与 an extra to order by the many-to-many ID 配对:

.extra(select={
'creation_seq': 'articlepage_authors.id'
}).order_by("creation_seq")

如果您使用的是 django > 1.10,您可以直接使用该字段而无需 extra:

.order_by('articlepage_authors.id')

关于django - Django 查询集结果的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55713171/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com