Упорядочение набора запросов Django по _set - PullRequest
2 голосов
/ 13 июля 2011

У меня есть эти модели:

class Person(models.Model):
    name = models.CharField()
    likes = models.ManyToManyField(Image)

class Image(models.Model):
    name = ...
    image = ...

Если я использую [x.person_set.count() for x in Image.objects.all()], я получаю, сколько людей любит каждое изображение.

Теперь мне нужно заказать список. Я хочу что-то вроде Image.objects.all().order_by('person_set.count()')

Мне нужно получить список всех изображений, упорядоченных по тому, насколько людям это нравится.

Как я могу это сделать?

1 Ответ

1 голос
/ 13 июля 2011

Это делает все, что вы хотите (количество лайков и порядок по количеству) в одном запросе.

from django.db.models import Count
Image.objects.annotate(Count("person")).order_by("person__count")
...