Запрос Django: Сортировать объекты по количеству появлений значения? - PullRequest
0 голосов
/ 16 мая 2019

Я пытаюсь использовать Django, чтобы вернуть список объектов с дублирующимися значениями, отсортированными от наиболее дублированных к наименее дублированным.

Например, допустим, у меня есть следующая модель:

class Person(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    name = models.CharField(max_length=128)

Я хочу вернуть список Person с, отсортированный от наиболее распространенных name до наименее распространенных name.

Я знаю, что могу использовать values и annotate, чтобы создать отсортированный список name значений, подобных этому:

Person.values('name').annotate(Count('id')).order_by('id__count')

Но я не хочу список name с; Я хочу список Person объектов. Есть ли способ сделать это?

Ответы [ 2 ]

1 голос
/ 16 мая 2019

Использовать подзапрос :

with_this_name = Person.objects.filter(name=OuterRef('name')).values('id')

persons = Person.objects.annotate(
     with_the_same_name=Count(Subquery(with_this_name))
).order_by(
    '-with_the_same_same'
)
0 голосов
/ 16 мая 2019

Если вы зададите в поле «Количество» в аннотации имя, вы сможете отсортировать его.

Person.values('name').annotate(duplicates=Count('id')).order_by('duplicates')

... или '-duplicates', если вы хотите отсортировать по убыванию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...