Как вывести Queryset?
Похоже я сильно туплю, но есть две модели: Product и Category (реализация супер-банальная).
Во view я отправляю в шаблон экземпляр Product и в шаблоне хочу вывести в цикле определенный Product и его Category.
Как вывести Category?
Он мне дает только
queryset(Queryset[<Category: Десерт>, <Category: Горячее>]).
А как это дело распаковать? Без вложенных циклов только пж...
class Prodduct(models.Model):
title = models.Charfield()
category = models.ManyToManyField('Category',
related_name='quotes_category')
class Category(models.Model):
title = models.CharField(max_length=150, db_index=True)
Ответы (1 шт):
Дело в том, что запросы в Django - ленивые. Это значит то, что фреймворк будет стараться оттягивать момент запроса в БД до последнего, пока не требуется что-то вывести на печать, а пока это возможно, как в вашем случае, возвращать вместо самих объектов - QuerySet.
По сути, QuerySet - это просто набор запросов к базе данных (но не результат!), которые сохранены в конкретном объекте, и которые можно в дальнейшем выполнить.
Допустим, у вас есть модель Product, тогда запрос
all_products = Product.objects.all()
вернет QuerySet, поскольку в данный момент никакого вывода не требуется.
Есть несколько случаев, когда QuerySet все-таки выполняется и происходит отправка запроса в БД, приведу несколько самых частых:
Итерация
for product in all_products: ...Получение одной записи
product = Products.objects.get(id=1)Преобразование в
listproducts = list(Products.objects.all())
Остальные примеры можно прочитать в документации.