我无法理解为什么查询集按其顺序返回。我们列出了文章的作者,这些文章存储在名为articlepage_authors
我们需要能够逐条选择返回和显示它们的顺序。
例如,id为49918的文章的作者为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”。
我不确定该如何调试。
一种解决方案是添加另一个字段来定义作者的顺序,但是我想首先了解这里的情况。似乎已经在定义订单了,最好管理一下。
答案 0 :(得分:2)
您可以添加an order_by
to your queryset以使记录按您想要的顺序显示。警告:对于查询优化,由于性能原因,您可能需要在该字段上创建索引,具体取决于数据库:
默认情况下,
QuerySet
返回的结果由模型的中的ordering
选项给出的排序元组排序。Meta
。您可以使用QuerySet
方法逐个order_by
覆盖它。 示例:
Entry.objects.filter(pub_date__year=2005).order_by('-pub_date', 'headline')
上面的结果将按
pub_date
降序排列,然后按headline
升序排列。"-pub_date"
前面的负号表示降序。暗含升序。
您将其与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')