Как заполнить поле внешнего ключа модели из поля внешнего ключа другого экземпляра модели

У меня есть модели: 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>

Вернуться на верх