我是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,这些authorsauthor排序:

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] authorsPublisher查询集放在[A] authors的之前。或发布商,其中[A,C]位于[B]和[C]之间

最佳答案

在这里使用from django.contrib.postgres.aggregates import StringAgg有帮助

关于python - Django中Manytomany字段的字母顺序错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58695344/

10-13 01:33