Почему Django выдает мне ошибку ValueError, когда я ссылаюсь на класс внутри одной модели?
Я создаю простое приложение для рецептов, и пока у меня есть две модели: Ingredient
и Recipe
.
В каждом рецепте должно быть несколько ингредиентов, поэтому я изложил свою модель следующим образом:
class Ingredient(models.Model):
name = models.CharField(max_length=50)
class Recipe(models.Model):
title = models.CharField(max_length=100)
ingredients = models.ForeignKey(Ingredient, on_delete=CASCADE)
instructions = JSONField()
date_posted = models.DateTimeField(default=timezone.now)
author = models.ForeignKey(User, on_delete=SET_DEFAULT, default='Chef Anon')
Когда я делаю миграции, я ничего не получаю, но когда я мигрирую, я получаю эту ValueError:
ValueError: Cannot alter field cookbook.Recipe.ingredients into cookbook.Recipe.ingredients - they do not properly define db_type (are you using a badly-written custom field?)
Следуя примеру здесь (Django: Add foreign key in same model but different class), я пробовал устанавливать ingredients=models.ForeignKey(Ingredient, on_delete=CASCADE)
, а также использовать ленивый синтаксис ingredients=models.ForeignKey("Ingredient", on_delete=CASCADE)
, но каждый раз makemigrations
не показывает никаких изменений, а migrate
дает мне то же самое ValueError
.
Попробуйте заменить on_delete=CASCADE
на on_delete=models.CASCADE
Если вы не импортировали CASCADE
отдельно от models
.
Все же, в этом случае вы должны получить предупреждение, что "CASCADE не определен".
Кажется, я нашел проблему: мой models.py
файл находился в корневом каталоге, а не в каталоге app.