Как вывести 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 все-таки выполняется и происходит отправка запроса в БД, приведу несколько самых частых:

  1. Итерация

    for product in all_products: ...

  2. Получение одной записи

    product = Products.objects.get(id=1)

  3. Преобразование в list

    products = list(Products.objects.all())

Остальные примеры можно прочитать в документации.

→ Ссылка