Как создать административную строку для записи рецепта
Я создаю минимальный жизнеспособный продукт приложения для рецептов. Я хотел бы использовать админку сайта для создания записи в дневнике, которая состоит из рецепта, состоящего из ингредиентов с количеством и количеством. Я читал, что вставки возможны. Однако мне не удалось успешно реализовать ни одного.
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)