Как создать административную строку для записи рецепта

Я создаю минимальный жизнеспособный продукт приложения для рецептов. Я хотел бы использовать админку сайта для создания записи в дневнике, которая состоит из рецепта, состоящего из ингредиентов с количеством и количеством. Я читал, что вставки возможны. Однако мне не удалось успешно реализовать ни одного.

class Meal(models.Model):

    id = models.BigAutoField(primary_key=True, editable=False)
    name = models.CharField(max_length=64, unique=True)

    class Meta:
        verbose_name = ("Meal")
        verbose_name_plural = ("Meals")

    def __str__(self):
        return f"{self.name}"


class Measurement(models.Model):

    id = models.BigAutoField(primary_key=True, editable=False)
    name = models.CharField(max_length=64, unique=True)

    class Meta:
        verbose_name = ("Measurement")
        verbose_name_plural = ("Measurements")

    def __str__(self):
        return f"{self.name}"


class Ingredient(models.Model):

    id = models.BigAutoField(primary_key=True, editable=False)
    name = models.CharField(max_length=64, unique=True)

    class Meta:
        verbose_name = ("Ingredient")
        verbose_name_plural = ("Ingredients")

    def __str__(self):
        return f"{self.name}"


class Recipe(models.Model):

    id = models.BigAutoField(primary_key=True, editable=False)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)    
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    name = models.CharField(max_length=64)

    class Meta:
        verbose_name = ("Recipe")
        verbose_name_plural = ("Recipes")

    def __str__(self):
        return f"{self.name}"


class RecipeIngredient(models.Model):
    id = models.BigAutoField(primary_key=True, editable=False)
    recipe = models.ForeignKey(Recipe, on_delete=models.CASCADE)
    quantity = models.CharField(max_length=64, blank=True, null=True)
    measurement = models.ForeignKey(Measurement, on_delete=models.CASCADE, blank=True, null=True)
    ingredient = models.ForeignKey(Ingredient, on_delete=models.CASCADE)
    
    class Meta:
        verbose_name = ("RecipeIngredient")
        verbose_name_plural = ("RecipeIngredients")

 
class Diary(models.Model):
    
    id = models.BigAutoField(primary_key=True, editable=False)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)    
    occured_at = models.DateTimeField()
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    recipe = models.ForeignKey(Recipe, on_delete=models.CASCADE)

    class Meta:
        verbose_name = ("Diary")
        verbose_name_plural = ("Diaries")

В соответствии с вашими требованиями, вы можете использовать StackedInline или TabularInline. Здесь приведен код для общего StackedInline. TabularInline работает аналогичным образом.

#admin.py

class Class_1(admin.StackedInline):
    model = Model_1
    
class Class_2(admin.StackedInline):
    model = Model_2     

class Class_3(admin.ModelAdmin):
    inlines = [Class_1,Model_2]

admin.site.register(Model_Name, Class_3)
Вернуться на верх