Witam,
pracuję nad projektem swojej pierwszej aplikacji w django, coś w rodzaju książki z przepisami, gdzie dodatkowo będzie można ułożyć meal plan
na dany dzień.
Mam problem z poprawnym wyświetleniem widoku szczegółów meal planu. Chodzi mi konkretnie o to, aby wyswietlila sie nazwa posiłku (np.śniadanie) i dalej dzialajacy link do przypisanego do tego posilku przepisu . Nazwa posilku jest polem 'meal' z opcja choice z modelu through, oto moje modele w calosci:
class Recipe(models.Model):
title = models.CharField(max_length=50)
cooking_time = models.IntegerField(help_text='w minutach', 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, 'Śniadanie'),
(2, 'Drugie śniadanie'),
(3, 'Obiad'),
(4, 'Podwieczorek'),
(5, 'Kolacja'),
(6, 'Przekąska')
)
class MealPlan(models.Model):
name = models.CharField(max_length=50)
amount = models.IntegerField(validators=[MinValueValidator(4), MaxValueValidator(6)])
Oto mój widok stworzony do wyświetlania szczegółów meal planu:
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})
Oraz html (wiem, że to tutaj coś nie gra):
{% 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 %}
Wszystko wyświetla się ok, natomiast nie działa link do szczegółów posiłku w meal planie, czyli
<a href="/recipe/{{recipe.id}}/">
Link działa, kiedy pętlę w html przerobię jak niżej:
{% for recipe in recipes %}
<li><a href="/recipe/{{recipe.id}}/">{{ recipe.title }} </a></li>
{% endfor %}
Ale wtedy nie wyświetla mi się nazwa konkretnego posiłku przy przepisie, a sam link z przepisem(który ładnie działa).
Nie umiem sobie złożyć tego w całość, aby wyświetały się równocześnie nazwa posiłku, a po niej działający link do przepisu.
Udało mi się tylko osiagnąć działający efekt umieszczając 2 powyższe pętle for razem, ale wtedy mam powtórzone kilka razy te same posiłki, co jest bez sensu.
Będę wdzięczny za jakieś podpowiedzi.