Не могу ли я добавить список к моему models.py в django?

Я совсем новичок в Django и в этом проекте мне нужно управлять информацией о ресторане. Проблема в том, что я не могу добавить более одного ингредиента, необходимого для рецепта

Photo of the problem

Мой models.py выглядит следующим образом:

from django.db import models

# Create your models here.
    
class Ingredient(models.Model):
    name = models.CharField(max_length=35)
    quantity = models.IntegerField()
    unit = models.CharField(max_length=5)
    unit_price = models.FloatField()

    def __str__(self):
        return self.name

class MenuItem(models.Model):
    title = models.CharField(max_length=35)
    price = models.FloatField()
    example = models.ImageField()

    def __str__(self):
        return self.title

class RecipeRequirement(models.Model):
    menu_items = models.ForeignKey(MenuItem, default = 1,  on_delete=models.SET_DEFAULT)
    ingredient = models.CharField(max_length=35)
    quantity = models.FloatField()
    def __str__(self):
        return str(self.menu_items)


class Purchase(models.Model):
    menu_item = models.ForeignKey(MenuItem, default=1, on_delete=models.SET_DEFAULT)
    timestamp = models.DateTimeField()

    def __str__(self):
        return 'Purchase ' + str(self.menu_item) + str(self.timestamp)

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

Я предлагаю использовать такой сайт, как https://drawsql.app/, чтобы получить лучшую визуализацию связей вашей базы данных.

В вашей модели RecipeRequirement необходимо иметь отношение ManyToMany. Это позволит вам выбирать несколько ингредиентов для одного объекта RecipeRequirement. Подробнее читайте здесь: Django ManyToMany Fields

class RecipeRequirement(models.Model):
    menu_items = models.ForeignKey(MenuItem, default = 1,  on_delete=models.SET_DEFAULT)
    ingredients = models.ManyToManyField(Ingredient)
    quantity = models.FloatField()

    def __str__(self):
        return str(self.menu_items)

Установите ингредиенты в классе RecipeRequirement как поле ManyToMany в классе Ingredient:

class RecipeRequirement(models.Model):
    menu_items = models.ForeignKey(MenuItem, default = 1,  on_delete=models.SET_DEFAULT)
    ingredients = models.ManyToManyField(Ingredient)
    quantity = models.FloatField()
    def __str__(self):
        return str(self.menu_items)
Вернуться на верх