Методика исправления того, что объект 'QuerySet' не имеет атрибута 'Breakdown' для проекта Django
У меня есть проект тренировочного прогресса, над которым я работаю, и я пытаюсь найти разбивку каждого упражнения, то есть повторения и порядок. Вот модель для пояснения:
class Workout(models.Model):
name = models.CharField(max_length = 30,blank=True, null=True)
date = models.DateField(blank=True, null=True)
slug = models.SlugField(unique=True,blank=True, null=True)
def __str__(self):
return str(self.name)
def get_absolute_url(self):
return reverse("my_gym:workout", kwargs={'workout_id': self.id})
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)
def __str__(self):
return self.name
class Breakdown(models.Model):
exercise = models.ForeignKey(Exercise, on_delete=models.CASCADE, related_name='sets',blank=True, null=True)
weight = models.FloatField(validators=[MinValueValidator(0)],blank=True, null=True)
repetitions = models.IntegerField(validators=[MinValueValidator(1)],blank=True, null=True)
order = models.IntegerField(validators=[MinValueValidator(1)],blank=True, null=True)
def __str__(self):
return self.exercise.name + ' set #' + str(self.order)
Я пытаюсь показать таблицу после перехода к списку упражнений для просмотра повторений и порядка
Вот url:
urlpatterns = [
path('', views.home, name='home'),
path('workout/<int:workout_id>/', views.workout_details, name='workout'),
]
Вот мнения:
def workout_details(request,workout_id):
template_name = 'my_gym/start_workout.html'
# workouts = Workout.objects.filter(workout_id=workout_id)
# excercises = Exercise.objects.get(pk=workout_id)
excercises = Exercise.objects.filter(workout_id=workout_id)
breakdown=excercises.Breakdown.repetitions.all()
context = {
'excercises': excercises,
'breakdown':breakdown
}
return render(request, template_name, context)
В шаблоне:
{% for set in sets %}
{{excercises.breakdown.order}}
{{set.repetitions}}
{% endfor %}
Мой вопрос:
Я получаю
'QuerySet' object has no attribute 'Breakdown'
ошибка
Я пробовал много вариантов, которые я прокомментировал, в результате я получал либо список всех разбивок всех упражнений, либо вообще ничего не получал.
Мой объект получает, например, список повторений в workout_id=1 url
Давайте разложим это по полочкам:
excercises
является кверисетом объектов Exercise
Breakdown - это модель, которая имеет отношение ForeignKey к Exercise, со связанным именем sets
Итак, чтобы получить разбивки, связанные с упражнениями в упражнениях, вы можете использовать
breakdowns = excercises.sets.all().order_by('order')
Теперь в своем шаблоне вы можете использовать
{% for exercise in excercises %}
{{ exercise }}
{% for breakdown in breakdowns %}
{% if breakdown.exercise == exercise %}}
repetitions: {{breakdown.repetitions}}<br>
{% endif %}
{% endfor %}
{% endfor %}