Я борюсь, получая мою голову вокруг ORM Django. То, что я хочу сделать, получают список отличных значений в поле на моей таблице.... эквивалент одного из следующего:
SELECT DISTINCT myfieldname FROM mytable
(или альтернативно)
SELECT myfieldname FROM mytable GROUP BY myfieldname
Я, по крайней мере, хотел бы сделать это Django путь прежде, чем обратиться к сырым данным sql. Например, с таблицей:
идентификатор, улица, город
Мэйн-Стрит, 1, Hull
2, другая улица, оболочка
3, Bibble путь, Лестер
4, иначе, Лестер
5, главная улица, Londidium
Я хотел бы добраться:
Оболочка, Лестер, Londidium.
Допустим, ваша модель - «Магазин»
class Shop(models.Model):
street = models.CharField(max_length=150)
city = models.CharField(max_length=150)
# some of your models may have explicit ordering
class Meta:
ordering = ('city')
Поскольку у вас может быть установлен атрибут Meta
class ordering
, вы можете использовать order_by ()
без параметров чтобы очистить любой порядок при использовании independent ()
. См. Документацию в разделе order_by
()
. Если вы не хотите, чтобы к запросу применялось какое-либо упорядочение, даже упорядочение по умолчанию, вызовите order_by () без параметров.
и independent ()
в примечании, где обсуждаются проблемы с использованием independent ()
с упорядочением.
Чтобы запросить вашу БД, вам просто нужно вызвать:
models.Shop.objects.order_by().values('city').distinct()
Он возвращает словарь
или
models.Shop.objects.order_by().values_list('city').distinct()
Этот возвращает ValuesListQuerySet
, который вы можете преобразовать в список
.
Вы также можете добавить flat = True
в values_list
, чтобы сгладить результаты.
См. Также: Получить отдельные значения Queryset по полю