Как выводить все ManyToMany Fields?

У меня есть код моделей

class Training(models.Model):
    name = models.CharField(max_length=256)
    exercise = models.ManyToManyField('Exercise')
    description = models.TextField(default='Описания нет.')

    def __str__(self):
        return f'Тренировка "{self.name}"'


class Exercise(models.Model):
    exercise_name = models.CharField(max_length=256, default='Упражнение...')
    description = models.TextField(default='Упражнение не имеет описания.')

    def __str__(self):
        return f'{self.exercise_name}'

и при выводе каждого упражнения на сайт, я получаю только последнее. Код шаблона:

{{ training.name }}
{% for exercise in training.exercise.all %}
    {{ exercise }}
{% endfor %}

В чём может крыться проблема, тоже не понимаю. Листал англоязычный stackoverflow - информация только про .all в цикле for в шаблоне, и она выводит только 1 упражнение. :(


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

Автор решения: Tim-Tam

У вас for описан не корректно. Вам нужно на страницу передать все объекты класса training и потом выводить их в цикле.

Примерно так:

context = {
    'trainings': Training.objects.all()
}

передать его на страницу

return render(request, 'your_template.html', context)

И потом его в цикле выводить

{% for training in trainings %}
    {{ training.exercise }}
{% endfor %}
→ Ссылка