Как заполнить поле внешнего ключа модели из поля внешнего ключа другого экземпляра модели
У меня есть модели: Recipe, Ingredient и Cart.
У меня будет 2 типа пользователей: Повара и Едоки.
Повара создают посты с рецептами и указывают ингредиенты для каждого рецепта. Ингредиенты сопоставляются с продуктами
Я хочу, чтобы у едоков, когда они находятся на странице recipe_detail.html, их корзина была предварительно заполнена всеми продуктами, указанными в списке ингредиентов, связанных с рецептом, который в данный момент посещается.
Вот мой код:
#ingredients/models.py
class Product(models.Model):
name = models.CharField(max_length=255)
class Ingredient(models.Model):
recipe = models.ForeignKey(Recipe,on_delete=models.CASCADE, blank=True, related_name='ingredients')
product = models.ForeignKey(Product,on_delete=models.CASCADE, blank=True)
#cart/models.py
class Cart(models.Model):
owner = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
product = models.ForeignKey(Product, on_delete=models.CASCADE, related_name='products')
#cart/views.py
class CartCreateView(CreateView):
model = Cart
template_name = "recipes/recipe_detail.html"
form_class = CartModelForm
def dispatch(self, request, *args, **kwargs):
"""
Overridden so we can make sure the `Recipe` instance exists
before going any further.
"""
self.recipe = get_object_or_404(Recipe, pk=kwargs['Recipe_id'])
return super().dispatch(request, *args, **kwargs)
def form_valid(self, form):
"""
Overridden to add the recipe relation to the `Ingredient` instance.
"""
ingredients = self.recipe.ingredient.all()
form.instance.owner = self.request.user.pk
form.instance.product = None # <---- The problem
return super(CartCreateView, self).form_valid(form)
#recipe_detail.html
<!-- Recipe -->
<div>
<h2>{{ recipe.title }}</h2>
<p>By: {{ recipe.owner }}</p>
</div>
<!-- Ingrediants -->
<div>
<h4>Ingrediant list:</h4>
<ul>
{% for ingrediant in recipe.ingrediants.all %}
<li>{{ ingrediant }} {{ ingrediant.context }}
{% if request.user == recipe.owner %}
<p>
<a href="{% url 'reqs:ingrediant-update' ingrediant.pk %}" role="button" style="white-space: pre-line;">Update</a> |
<a href="{% url 'reqs:ingrediant-delete' ingrediant.pk %}" role="button" style="white-space: pre-line;">Delete</a>
</p>
{% endif %}
</li>
{% endfor %}
</ul>
{% if request.user == recipe.owner %}
<a href="{% url 'reqs:ingrediant-create' recipe.pk %}" role="button">
<h4>Add ingrediants for this recipe</h4>
</a>
{% endif %}
</div>
<!-- Hidden cart create form -->
<form method="post" enctype="multipart/form-data" action="{% url 'cart:cart-create' recipe.pk %}">
{% csrf_token %}
{{ form }}
<button type="submit">Submit</button>
</form>