简体   繁体   中英

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

I try to save menu.json file data to my database sql in django rest_framework api. Can you help me? Can you check my database model is it okey? also I got error I mentioned below.

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)

I tried delete my database and makemigrations, migrate but it did not solve my problem.

My error is:

  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

There are some issues when creating Ingredient, you define 3 fields, none of which can be null. You try to create an ingredient here

ingre_obj, created = Ingredient.objects.get_or_create(name=ingre_name) . You don't specify groups and meal , but they can't be null.

Either make them nullable or add meal and groups when you create the object.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM