Django中Manytomany字段的字母顺序错误

我是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

from app.models import Publisher
[print(i.pub_authors.all()) for i Publisher.all().order_by('pub_authors__name')]

每个author只有1个publisher(正确的顺序)时的输出示例:

<QuerySet [<Author: A>]>
<QuerySet [<Author: A>]>
<QuerySet [<Author: A>]>
<QuerySet [<Author: B>]>
<QuerySet [<Author: C>]>

每个author的个publisher多于1个(错误顺序)时的输出示例:

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

countmachine 回答:Django中Manytomany字段的字母顺序错误

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

本文链接:https://www.f2er.com/3166054.html

大家都在问