我是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]之间