Как выводить все 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 %}