Если вам не нужны экземпляры модели (которые бесполезны, если вам нужно одно поле), вы также можете просто использовать простой курсор db-api:
from django.db import connection
cursor = connection.cursor()
cursor.execute("select distinct field from table")
for row in cursor:
print(row[0])
Но для вашего примера использования вам вообще не нужен SQL - в orm есть values
и values_list
наборов запросов и модификатор distinct()
:
queryset = YourModel.objects.values_list("field", flat=True).order_by("field").distinct()
print(str(queryset.query))
# > 'SELECT DISTINCT `table`.`field` FROM `table` ORDER BY `table`.`title` ASC'
for title in queryset:
print(title)
Примечание:
1 /, поскольку нам нужно одно поле, я использую аргумент flat=True
, чтобы избежать получения списка кортежей
2 / Я явно устанавливаю порядок в поле, иначе порядок по умолчанию, определенный в метаданных модели, может заставить поле порядка также быть частью сгенерированного запроса.