Return Database.Cursor.execute(self, query, params) django.db.utils.OperationalError: no such column: api_ingredient.meal_id

Я пытаюсь сохранить данные файла menu.json в мою базу данных sql в django rest_framework api. Можете ли вы мне помочь? Можете ли вы проверить модель моей базы данных, все ли в порядке? Также у меня возникла ошибка, о которой я говорил ниже.

models.py

class Meal(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=100)
    is_vegetarian = models.BooleanField(default=False)
    is_vegan = models.BooleanField(default=False)

    def __str__(self):
        return self.name

class Ingredient(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=100)
    groups = models.CharField(max_length=100)
    meal = models.ForeignKey(Meal, on_delete=models.CASCADE)

    def __str__(self):
        return self.name

class Option(models.Model):
    id = models.AutoField(primary_key=True)
    ingredient = models.ForeignKey(Ingredient, on_delete=models.CASCADE)
    name = models.CharField(max_length=100)
    quality = models.CharField(max_length=100)
    price = models.FloatField()
    per_amount = models.CharField(max_length=100)

    def __str__(self):
        return self.name

class MealIngredient(models.Model):
    id = models.AutoField(primary_key=True)
    meal = models.ForeignKey(Meal, on_delete=models.CASCADE)
    ingredient = models.ForeignKey(Ingredient, on_delete=models.CASCADE)



path = r"C:\Users\OSMAN MERT\Desktop\menu\menu_core\menu.json"

with open(path) as f:
  data = json.loads(f.read())

for meal in data["meals"]:
    id = meal["id"]
    name = meal["name"]
    meal_obj, created = Meal.objects.get_or_create(name=name)
    for ingredient in meal["ingredients"]:
        name_in = ingredient["name"]
        ingredient_obj, created = Ingredient.objects.get_or_create(name=name_in)
        MealIngredient.objects.get_or_create(meal=meal_obj, ingredient=ingredient_obj)

for ingre in data["ingredients"]:
  ingre_name = ingre["name"]
  ingre_obj, created = Ingredient.objects.get_or_create(name=ingre_name)

  for opti in ingre["options"]:
    opt_name = opti["name"]
    opt_quality = opti["quality"]
    opt_price = opti["price"]
    opt_amount = opti["per_amount"]
    Option.objects.get_or_create(ingredient=ingre_obj, name=opt_name, quality=opt_quality,
                                  price=opt_price, per_amount=opt_amount)

Я пробовал удалять свою базу данных и делать миграции, мигрировать, но это не решило мою проблему.

Моя ошибка:

  File "C:\Users\OSMAN MERT\AppData\Local\Programs\Python\Python310\lib\site-packages\django\db\backends\utils.py", line 84, in _execute   
    with self.db.wrap_database_errors:
  File "C:\Users\OSMAN MERT\AppData\Local\Programs\Python\Python310\lib\site-packages\django\db\utils.py", line 91, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "C:\Users\OSMAN MERT\AppData\Local\Programs\Python\Python310\lib\site-packages\django\db\backends\utils.py", line 89, in _execute   
    return self.cursor.execute(sql, params)
  File "C:\Users\OSMAN MERT\AppData\Local\Programs\Python\Python310\lib\site-packages\django\db\backends\sqlite3\base.py", line 477, in execute
    return Database.Cursor.execute(self, query, params)
django.db.utils.OperationalError: no such column: api_ingredient.meal_id

При создании ингредиента возникают некоторые проблемы, вы определяете 3 поля, ни одно из которых не может быть null. Вы пытаетесь создать ингредиент здесь

ingre_obj, created = Ingredient.objects.get_or_create(name=ingre_name) . Вы не указываете groups и meal, но они не могут быть нулевыми.

Либо сделайте их nullable, либо добавьте meal и groups при создании объекта.

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