Выберите различные значения из поля таблицы

Я изо всех сил пытаюсь разобраться с 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, Leicester

4, Другой путь, Лестер

5, High Street, Londidium

Я хотел бы получить:

Халл, Лестер, Лондидиум.

Ответ 1

Скажите, что ваша модель "Магазин"

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() без параметров, чтобы очистить порядок при использовании distinct(). См. Документацию в order_by()

Если вы не хотите, чтобы какой-либо заказ был применен к запросу, даже не по умолчанию, закажите order_by() без параметров.

и distinct() в примечании, где обсуждаются проблемы с использованием distinct() с упорядочением.

Чтобы запросить свою БД, вам просто нужно позвонить:

models.Shop.objects.order_by().values('city').distinct()  # returns a dictionary

или

models.Shop.objects.order_by().values_list('city').distinct()  # returns a list of tuples.

Вы также можете добавить flat=True в values_list, чтобы иметь плоский список.

Смотрите также: Получите различные значения Queryset по полю