Я изо всех сил пытаюсь понять ORM Django. Я хочу получить список различных значений в поле в моей таблице ... эквивалент одного из следующих:
SELECT DISTINCT myfieldname FROM mytable
(или альтернативно)
SELECT myfieldname FROM mytable GROUP BY myfieldname
Я бы по крайней мере хотел сделать это способом Django, прежде чем прибегать к raw sql. Например, со столом:
id, улица, город
1, Main Street, Hull
2, Другая улица, Корпус
3, Bibble Way, Лестер
4, Другой путь, Лестер
5, Хай-стрит, Лондон
Я хочу получить:
Халл, Лестер, Лондидиум.
values_list
самом деле это не возвращает список. Он возвращает что-то вроде набора запросов. Я счел полезным всегда использовать list () вокруг вызовов values_list.values_list
возвращает ValuesListQuerySet, который является итератором. Приведение к списку может быть удобным, но также может снизить производительность, когда все строки должны быть оценены одновременно, особенно с большими наборами данных.Meta: ordering = ()
«Особенность» Джанго ОРМ иobjects.distinct()
VS.objects.ordering().distinct()
вызывает у нас часов путаницы. На этом продукте должна быть наклейка с предупреждением о безопасности потребителей;) Мы можем ввести политику отсутствия атрибутов мета-заказа, чтобы предотвратить царапины на голове в будущем.Meta
классordering
и решить проблемы сdistinct
использованиемorder_by()
без параметров. Это в документации QuerySet API подorder_by()
« Если вы не хотите какой - либо заказ будет применяться к запросу, даже не упорядоченности по умолчанию, вызовorder_by()
без параметров. »Помимо еще очень актуальных ответу jujule , я считаю , это очень важно также знать о последствиях
order_by()
наdistinct("field_name")
запросах. Однако это только функция Postgres!Если вы используете Postgres и определяете имя поля, для которого запрос должен отличаться, тогда
order_by()
необходимо начинать с того же имени поля (или имен полей) в той же последовательности (после этого может быть больше полей).Если вы хотите, например, извлечь список городов, в которых вы знаете магазины, пример джужуле необходимо адаптировать к этому:
источник
По примеру:
источник