Добавление контекста в Django-проект с представлением на основе классов

У меня проблема с отображением набора запросов определенной модели в моем проекте Gym. Я перепробовал множество различных запросов, но ни один из них не работает

модели:

class Workout(models.Model):
    name = models.CharField(max_length = 30,blank=True, null=True)

class Exercise(models.Model):
    workout = models.ForeignKey(Workout, on_delete=models.CASCADE, related_name='exercises',blank=True, null=True)
    name = models.CharField(max_length = 30, blank=True, null=True)

class Breakdown(models.Model):
    exercise = models.ForeignKey(Exercise, on_delete=models.CASCADE, related_name='excercise',blank=True, null=True)
    repetitions = models.IntegerField()

Я пытаюсь показать repetitions в модели Breakdown, которая имеет ForeignKey отношение с Exercise, которое имеет ForeignKey отношение с Workout

views.py

class home(ListView):
    model = Workout
    template_name = 'my_gym/home.html'
    context_object_name = 'workouts'

class workout_details(ListView):
    model = Exercise
    template_name = 'my_gym/start_workout.html'
    context_object_name = 'exercises'
    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['breakdown'] = Exercise.objects.filter(breakdown=self.breakdown)
        return context

urls.py

urlpatterns = [
    path('', home.as_view(), name='home'),
    path('workout/<int:pk>/', workout_details.as_view(), name='workout'),
]

Шаблон:

{% for e in exercises %}
{{ e.name }}
{{ breakdown.repetitions }}
{% endfor %}

Мой вопрос, в чем моя ошибка, которая либо выдает ошибку, либо не показывает требуемый набор данных. Моя цель - выбрать на главной странице тренировку из списка, а на следующей странице должен быть список упражнений с соответствующими повторениями.

get_context_data() - это метод, рассчитанный на просмотр, а не цикл для использования внутри шаблона или чего-то подобного. Вы установили хорошие отношения, используйте их правильно.

Во-первых, измените related_name здесь на то, что не будет вызывать путаницы:

class Breakdown(models.Model):
    exercise = models.ForeignKey(Exercise, on_delete=models.CASCADE, related_name='breakdowns', blank=True, null=True)

После этого удалите весь get_context_data() и измените шаблон на:

{% for e in exercises %}
    {{ e.name }}
    {% for b in e.breakdowns.all %}
        {{ b.repetitions }}
    {% endfor %}
{% endfor %}
Вернуться на верх