Как выводить поля many to many в шаблоне django?

Из документации Django
from django.db import models

class Topping(models.Model):
    # ...
    pass

class Pizza(models.Model):
    # ...
    toppings = models.ManyToManyField(Topping)


Как вывести все пиццы со входящими в них топпингами понятно:
pizzas = Pizza.objects.all()

И в шаблоне:
{% for pizza in pizzas %}
    В пиццу {{ pizza.name }} входят топпинги:
    {% for topping in pizzas.toppings.all %}
    {{ topping.name }}
    {% endfor %}
{% endfor %}


А если например нужно вывести список топпингов и для каждого топпинга указать в какой пицце он используется? Нельзя ведь сделать в шаблоне toppings.pizzas.all, потомучто связь m2m указана только в одной модели...
Вручную формировать во вьюхе список типа [{'pizza': pizza, 'toppings': [topping1, topping2,...]}, ...] ?

PS: Меня интересует не как сделать запрос к бд (найти пиццы через топпинги), а как потом вывести это в шаблоне чтобы в итоге получилось например так:
Томатный топпинг используется в пиццах: 1. Итальянская, 2. Мясная;
Кукурузный топпинг используется в пиццах: 1. Мясная, 2. Куриная
  • Вопрос задан
  • 3754 просмотра
Пригласить эксперта
Ответы на вопрос 2
@Animkim
Питон вокруг меня
topping.pizza_set.all() или задать свой related_name.
toppings = models.ManyToManyField(Topping, related_name='pizza')
---
topping.pizza.all()
Ответ написан
darqsat
@darqsat
PM
Я нечто подобное делал через аннотации и агрегации
Кури https://docs.djangoproject.com/en/2.0/topics/db/ag...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы