Сортировка QuerySet по ManyToManyField в Django - PullRequest
2 голосов
/ 08 мая 2020

У меня есть такая модель:

class my_model(models.Model)
    foo = models.ManyToManyField(My_other_model)

Я хочу получить все объекты my_model, отсортированные по количеству объектов в поле foo. В этом Вопросе Дружелюбный Парень из России говорит, что вы должны использовать django -аннонтацию. Я пробовал следующее:

my_model.objects.all().order_by("-foo")

, и он отлично работает. Есть ли причина, по которой я должен go использовать более длинный путь с аннотациями ?? Спасибо за помощь и оставайтесь здоровыми!

1 Ответ

1 голос
/ 08 мая 2020

Из документов ваш вариант использования может использовать только .order_by(). Для более сложных запросов вы будете использовать .annotate(), например:

below_5 = Count('book', filter=Q(book__rating__lte=5))
pubs = Publisher.objects.annotate(below_5=below_5)

Вы также можете сделать несколько аннотаций, например:

below_5 = Count('book', filter=Q(book__rating__lte=5))
above_5 = Count('book', filter=Q(book__rating__gte=5))
pubs = Publisher.objects.annotate(below_5=below_5).annotate(above_5=above_5)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...