我是Django的初学者,试图弄清楚为什么当我有2条以上记录时,按m2m字段的字母顺序错误。
下面提供了一些虚拟信息,以使您更好地理解。
从头开始创建models.py
:
from django.db import models
class Author(models.Model):
name = models.CharField(max_length=50)
class Publisher(models.Model):
name = models.CharField(max_length=50)
pub_authors = models.ManyToManyField(Author, blank=True)
用一些数据填充db后,尝试在python控制台中进行简单查询以给出所有
publishers
,这些authors
由author
排序:from app.models import Publisher
[print(i.pub_authors.all()) for i Publisher.all().order_by('pub_authors__name')]
每个
publisher
只有1个author
时的输出示例(正确的顺序):<QuerySet [<Author: A>]>
<QuerySet [<Author: A>]>
<QuerySet [<Author: A>]>
<QuerySet [<Author: B>]>
<QuerySet [<Author: C>]>
每个
publisher
大于1个Publisher
时的输出示例(顺序错误):<QuerySet [<Author: A>]>
<QuerySet [<Author: A>]>
<QuerySet [<Author: A>, <Author: B>]>
<QuerySet [<Author: A>]>
<QuerySet [<Author: B>]>
<QuerySet [<Author: B>, <Author: A>]>
<QuerySet [<Author: B>, <Author: C>]>
<QuerySet [<Author: B>]>
<QuerySet [<Author: A>, <Author: C>]>
<QuerySet [<Author: C>]>
预期成绩:
<QuerySet [<Author: A>]>
<QuerySet [<Author: A>]>
<QuerySet [<Author: A>]>
<QuerySet [<Author: A>, <Author: B>]>
<QuerySet [<Author: A>, <Author: C>]>
<QuerySet [<Author: B>]>
<QuerySet [<Author: B>]>
<QuerySet [<Author: B>]>
<QuerySet [<Author: B>, <Author: C>]>
<QuerySet [<Author: C>]>
希望您能为我指明正确的方向,至少为什么会发生这种情况(一周内无法解决,对此非常挣扎)
更新:我提供了错误的预期结果(抱歉),请对其进行更新。我看到我需要澄清一点:
我在
Publisher
查询集之间有错误的顺序,而不是在每个Publisher
内部。因此,我担心将[A,B]
authors
的Publisher
查询集放在[A] authors
的之前。或发布商,其中[A,C]位于[B]和[C]之间 最佳答案
在这里使用from django.contrib.postgres.aggregates import StringAgg
有帮助
关于python - Django中Manytomany字段的字母顺序错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58695344/