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

В процессе работы над моим первым приложением (что-то вроде кулинарной книги, где можно будет также создавать планы питания) у меня возникла проблема с добавлением одного поля из модели many-to-many(through) в мой html шаблон. Имя поля 'meal' в модели RecipeMealPlan.

Вот мои модели:

class Recipe(models.Model):
title = models.CharField(max_length=50)
cooking_time = models.IntegerField(help_text='in minutes', validators=[MinValueValidator(1), MaxValueValidator(5000)])
difficulty_level = models.IntegerField(choices=DIFFICULTY_LEVELS, default=1)
description = models.TextField()
created = models.DateTimeField(auto_now_add=True)
cuisine = models.ForeignKey('Cuisine', on_delete=models.CASCADE, null=True)
ingredient = models.ManyToManyField(Ingredient, through='IngredientRecipe')
meal_plan = models.ManyToManyField('MealPlan', through='RecipeMealPlan')

class RecipeMealPlan(models.Model):
    recipe = models.ForeignKey(Recipe, on_delete=models.CASCADE)
    meal_plan = models.ForeignKey('MealPlan', on_delete=models.CASCADE)
    meal = models.IntegerField(choices=MEALS)

MEALS = (
    (1, 'Breakfast'),
    (2, '2nd breakfast'),
    (3, 'Lunch'),
    (4, 'Snack'),
    (5, 'Dinner')
)

class MealPlan(models.Model):
    name = models.CharField(max_length=50)
    amount = models.IntegerField(validators=[MinValueValidator(4), MaxValueValidator(6)])

Вот мое представление, созданное для отображения деталей плана питания в моем приложении:

 class MealPlanDetailsView(View):
def get(self, request, id):
    mealplan = MealPlan.objects.get(id=id)
    recipes = mealplan.recipe_set.all()
    return render(request, 'diet_app/mealplan_details.html', {'mealplan': mealplan, 'recipes': recipes})

И html-шаблон:

 {% extends 'diet_app/base.html' %}
{% block title %}{{ mealplan|upper }}{% endblock %}
{% block content %}
                <h2>{{ mealplan|upper }}</h2>
                <ul> <p>Posiłki:</p>
                {% for recipe in mealplan.recipemealplan_set.all %}
                    <li>{{ recipe.get_meal_display}}: <a href="/recipe/{{recipe.id}}/">{{ recipe }}</a></li>
                {% endfor %}
                </ul>
{% endblock %}

Все выглядит хорошо, но ссылка на детали рецепта не работает:

<a href="/recipe/{{recipe.id}}/">

Ссылка работает, если я пишу цикл следующим образом:

{% for recipe in recipes %}
<li><a href="/recipe/{{recipe.id}}/">{{ recipe.title }} </a></li>
{% endfor %}

Но тогда я не вижу название блюда перед рецептом (название блюда означает завтрак, ужин и т.д.). Я не знаю, как это записать, чтобы видеть вместе название блюда и рецепт со ссылкой на подробности рецепта.

У меня получается только тогда, когда я пишу эти 2 цикла вместе, но потом я вижу, что мой план питания повторяется несколько раз.

Есть идеи, что я должен сделать, чтобы заставить его работать так, как я хочу?

recipe.id является id сквозной модели RecipeMealPlan, а не Recipe, поэтому вместо recipe.id нужно использовать recipe.recipe.id.

Также, ради здравого смысла, вы могли бы использовать что-то вроде recipemealplan вместо recipe в качестве имени переменной, так:

    {% for recipemealplan in mealplan.recipemealplan_set.all %}
        <li>{{ recipemealplan.get_meal_display}}: <a href="/recipe/{{ recipemealplan.recipe.id }}/">{{ recipemealplan }}</a></li>
    {% endfor %}
Вернуться на верх