Невозможно обновить/удалить элемент из таблицы даже при on_delete=CASCADE

Я пытаюсь создать БД портала кулинарных рецептов, и ни один из запросов DELETE не работает для меня.

Вот мои таблицы/модели, связанные с ошибкой:

class Ingredient(models.Model):
    ingredientid = models.IntegerField(primary_key=True)
    name = models.CharField(max_length=255)
    type = models.CharField(max_length=255)

class IngredientRecipe(models.Model):
    ingredientid = models.ForeignKey("Ingredient", to_field="ingredientid", on_delete=models.SET_NULL, null=True)
    recipeid = models.ForeignKey("Recipe", to_field="recipeid", on_delete=models.SET_NULL, null=True)
    amount = models.CharField(max_length=255)

    class Meta:
        unique_together = ("ingredientid", "recipeid")

class IngredientNutrition(models.Model):
    nutritionid = models.IntegerField(null=True, blank=True)
    ingredientid = models.ForeignKey("Ingredient", to_field="ingredientid", on_delete=models.CASCADE)
    #ingredientid = models.OneToOneField(Ingredient, on_delete=models.CASCADE)
    portionsize = models.FloatField(max_length=24)
    calories = models.IntegerField()
    fat = models.IntegerField()
    protein = models.IntegerField()
    sodium = models.IntegerField()
    carbs = models.IntegerField()

    class Meta:
        unique_together = (("nutritionid", "ingredientid"), )

Вопрос: Скажем, я хочу удалить ingredient.ingredientID = 20 или ingredient.name = 'Corn Starch', он не позволяет мне удалить, потому что ingredientID = 20 все еще ссылается на таблицу IngredientNutrition. У меня on__delete=CASCADE.

Я попробовал изменить параметры внутри models.ForeignKey и изменил параметры в различных ключах в различных таблицах, чтобы посмотреть, позволит ли это мне удалить.

Сначала нужно удалить объект IngredientNutrition, который ссылается на объект Ingredient, который вы хотите удалить, затем можно удалить объект Ingredient obj

DELETE FROM recipeportaldb_IngredientNutrition 
WHERE ingredientid = 20;

Тогда...

DELETE FROM recipeportaldb_ingredient 
WHERE ingredientid = 20;

Если вы используете django для обработки этого, это можно сделать с помощью одной строки:

Ingredient.objects.get(ingredientid=20).delete()
Вернуться на верх