Доступ к модели djagno до ее создания

Рассмотрим следующую структуру приложения. У вас есть две модели: Recipe и Ingredient, которые связаны друг с другом (очевидно, что каждый рецепт имеет некоторые ингредиенты, и многие ингредиенты могут быть в некоторых рецептах). Обратите внимание, что вы решили использовать M2M (многие ко многим) связь между этими двумя моделями с явной промежуточной моделью -- RecipeIngredient -- которая также содержит одно дополнительное поле с именем amount.

После всего вышесказанного у меня к вам только два вопроса. Как вы сохраните экземпляр рецепта с несколькими ингредиентами через django shell, если экземпляр рецепта все еще не создан. Вы можете считать, что у вас уже есть ингредиенты в вашей БД. И второй, как можно получить доступ к полю amount при создании рецепта?

Если вы запутались, я могу переформулировать вопрос. Как бы вы сохранили рецепт с указанными ингредиентами и их количеством? (Если есть простая модель отношений, которую я могу использовать, пожалуйста, опишите ее).

from django.db import models
from django.contrib.auth import get_user_model
from django.core.validators import MinValueValidator, MaxValueValidator


User = get_user_model()


class Recipe(models.Model):
    author = models.ForeignKey(
        User,
        on_delete=models.CASCADE,
        related_name='recipies',
        verbose_name='Author of a recipe'
    )

    name = models.CharField(max_length=200, verbose_name='Name of a recipe')
    image = models.ImageField()
    text = models.TextField(verbose_name='Description of a recipe')

    ingredients = models.ManyToManyField(
        'Ingredient',
        through='RecipeIngredient',
        verbose_name='Ingredients of a recipe'
        related_name='recipies'
    )

    cooking_time = models.IntegerField(
        validators=[
            MinValueValidator(1),
            MaxValueValidator(44640)
        ],
        verbose_name='Cooking time in minutes'
    )

    creation_date = models.DateTimeField(
        auto_now=True,
        verbose_name='Date of creation'
    )


class Ingredient(models.Model):
    name = models.CharField(
        max_length=256,
        verbose_name='Name of an ingredient'
    )

    measurement_unit = models.CharField(max_length=32)


class RecipeIngredient(models.Model):
    recipe = models.ForeignKey(
        'Recipe',
        on_delete=models.CASCADE
        related_name='ingredients'
    )

    ingredient = models.ForeignKey(
        'Ingredient',
        on_delete=models.CASCADE
        related_name='recipies'
    )

    amount = models.IntegerField(
        validators=[
            MinValueValidator(1),
            MaxValueValidator(44640)
        ],
        verbose_name='Amount of ingredients'
    )

Более формально, у вас есть структура запроса, описанная ниже, где id - это ссылка на существующий ингредиент, а amount - это, как ни банально, количество одного. Как следует сохранять рецепт?

{

    "ingredients": [
        {
            "id": 1123,
            "amount": 10
        }
    ],
    "name": "string",
    "text": "string",
    "cooking_time": 1

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