Я новичок в Django и пытаюсь выяснить, почему я ошибся в алфавитном порядке по полю 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)
После заполнения базы данных некоторыми данными, попытался выполнить простой запрос в консоли Python для получения всех publishers
которые упорядочены по authors
они имеют:
from app.models import Publisher
[print(i.pub_authors.all()) for i Publisher.all().order_by('pub_authors__name')]
Пример вывода, когда по 1 author
для каждого publisher
(правильное упорядочение):
<QuerySet [<Author: A>]>
<QuerySet [<Author: A>]>
<QuerySet [<Author: A>]>
<QuerySet [<Author: B>]>
<QuerySet [<Author: C>]>
Примервыходных, если есть более 1 author
для каждого 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
. Поэтому я волнуюсь, когда Publisher
queryset с [A, B] authors
ставится перед Publisher
с [A] authors
. Или Publisher с [A, C], расположенным между [B] и [C]