Django удаляет дубликаты из запроса .values_list, сохраняя порядок - PullRequest
0 голосов
/ 11 ноября 2019

У меня есть модель, скажем MyModel, которая содержит CharField type. Модель имеет мета-порядок по умолчанию, который следует сохранить. Я использую следующий запрос для получения списка типов -

MyModel.objects.all().values_list('type', flat=True).distinct()

Однако типы повторяются. Я могу сделать .order_by('type').distinct(), но это изменит порядок, который я не хочу. Есть ли способ получить список типов по порядку, не создавая список вручную в python? Также приветствуются альтернативные более быстрые решения.

Версия Django - 1.11

Ответы [ 3 ]

0 голосов
/ 11 ноября 2019

Вы можете попробовать это

MyModel.objects.all().values('type', flat=True).order_by('type').distinct()

это будет работать для вас

0 голосов
/ 11 ноября 2019

Вы можете сделать это в 2 шага:

Сначала получите идентификатор записей с уникальными типами и сохраните их в списке:

ids = list(MyModel.objects.values_list('id', flat=True).order_by('type').distinct('type'))

Затем выполните фильтрацию, используяидентификаторы:

MyModel.objects.values_list('type', flat=True).filter(id__in=ids)
0 голосов
/ 11 ноября 2019

Distinct не соответствует типу, потому что вы его не указали

используйте этот код

MyModel.objects.all().values_list('type', flat=True).distinct("type")

вместо этого кода

MyModel.objects.all().values_list('type', flat=True).distinct()
...