Один из способов получить список отдельных имен столбцов из базы данных - использовать distinct()
в сочетании с values()
.
В вашем случаеВы можете сделать следующее, чтобы получить имена различных категорий:
q = ProductOrder.objects.values('Category').distinct()
print q.query # See for yourself.
# The query would look something like
# SELECT DISTINCT "app_productorder"."category" FROM "app_productorder"
Здесь необходимо запомнить несколько вещей.Во-первых, это вернет ValuesQuerySet
, который ведет себя не так, как QuerySet
.Когда вы получаете доступ к say, первый элемент q
(выше), вы получите словарь , НЕ экземпляр ProductOrder
.
Во-вторых, было бы неплохо прочитать предупреждение в документации по использованию distinct()
.Приведенный выше пример будет работать, но все комбинации distinct()
и values()
могут не работать.
PS : рекомендуется использовать строчные имена для полей в модели.В вашем случае это будет означать переписывание вашей модели, как показано ниже:
class ProductOrder(models.Model):
product = models.CharField(max_length=20, primary_key=True)
category = models.CharField(max_length=30)
rank = models.IntegerField()