我有一个关于ManyRelatedManager对象中的排序的一般问题 . 例如,我的模型中有两个类:一个叫做Book for books,另一个是作者作者 .
课程中定义了多对多字段Book authors = models.ManyToManyField(Author)
在数据库中,多对多关系在附加表book_author中描述,其中包含三列:(id,book_id,author_id)
现在对于Book对象b,b.authors.all()和b.authors.iterator()都按book_author.author_id的顺序排序 . 但我想要的是以book_author.id的顺序检索b的作者,因为这是作者的正确顺序 .
有解决方案?提前谢谢了!
2 回答
如果您想根据书籍订购不同的作者,我建议使用
ManyToMany
字段并指定through
属性,如下所述:http://docs.djangoproject.com/en/dev/topics/db/models/#extra-fields-on-many-to-many-relationships如果您的
through
模型定义了一个排序列,您可以直接查询through
模型,例如您现在可以直接查询
through
模型,如果您愿意:您还可以添加
Meta
ordering
以在查询此模型时添加order_by
...现在你可以删除额外的
.order_by
子句,因为Django会自己添加它 .注意:即使使用
through
模型和Meta
ordering
,Django也不会在查询一侧或另一侧时添加.order_by
,例如以下内容不会添加ORDER BY
SQL:Book实例的“authors”属性是一个管理器,因此管理器方法order_by()将对其起作用:
(假设作者有“last_name”字段)