【问题标题】:Why is Django giving me a ValueError when I reference a class within the same model?当我在同一个模型中引用一个类时,为什么 Django 会给我一个 ValueError?
【发布时间】:2022-01-09 02:13:49
【问题描述】:

我正在构建一个简单的食谱应用程序,到目前为止我有两个模型:IngredientRecipe

每个食谱都应该有多种成分,所以我这样布置我的模型:

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.

编辑 我的进口:

from django.db.models.deletion import CASCADE, SET_DEFAULT, SET_NULL
from django.db.models.fields.json import JSONField
from django.utils import timezone
from django.contrib.auth.models import User```

【问题讨论】:

    标签: python django database class model


    【解决方案1】:

    尝试将on_delete=CASCADE 替换为on_delete=models.CASCADE

    如果您尚未将CASCADEmodels 分开导入。

    不过,在这种情况下,您应该会收到“未定义 CASCADE”的警告。

    【讨论】:

    • 抱歉,我忘记在顶部包含我的导入:from django.db.models.deletion import CASCADE
    【解决方案2】:

    我相信我发现了问题:我的models.py 文件在根目录中,而不是在应用程序目录中。

    【讨论】:

      猜你喜欢
      • 2012-09-29
      • 2013-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-23
      • 1970-01-01
      • 1970-01-01
      • 2021-12-07
      相关资源
      最近更新 更多