Вывести конкретное поле возвращаемой строки модели Dajngo

Это похоже простой вопрос. Есть модель, где по умолчанию возвращаю несколько полей

 def __str__(self):
        return '%s %s %s %s %s' % (self.id, self.name, self.code, self.level, self.parent)

Как впоследствии при Model.objects.all() получить только одно конкретное поле

Пробовал как-то так, но не выходит:

p = ProductCategory.objects.all()
    print(p.name)

Ответы (2 шт):

Автор решения: Alexander Goryushkin

Model.objects.all() должен возвращать список объектов.
Если вы хотите получить поле только первого объекта, то используйте доступ по нулевому индексу:

products = ProductCategory.objects.all()
    print(products[0].name)

Если вы хотите получить поле для каждого объекта используйте цикл:

products = ProductCategory.objects.all()
    for product in products:
        print(product.name)

А с помощью генератора вы можете извлечь поля из всех объектов и сохранить их в список:

products = ProductCategory.objects.all()
    names = [product.name for product in products]
→ Ссылка
Автор решения: 5c0rp

Метод __str__ относится конкретно к объекту. При p = ProductCategory.objects.all() конкретно в p у вас храниться не объект, а QuerySet и у него точно нет атрибута name. Что бы вывести name вам можно использовать либо for

p = ProductCategory.objects.all()
for obj in p:
    print(obj.name)

либо можно получить сразу массив имён

p = ProductCategory.objects.values_list('name', flat=True)
→ Ссылка