Вывести конкретное поле возвращаемой строки модели 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 шт):
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]
Метод __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)