当我在同一个模型中引用一个类时,为啥 Django 会给我一个 ValueError?
Posted
技术标签:
【中文标题】当我在同一个模型中引用一个类时,为啥 Django 会给我一个 ValueError?【英文标题】:Why is Django giving me a ValueError when I reference a class within the same model?当我在同一个模型中引用一个类时,为什么 Django 会给我一个 ValueError? 【发布时间】:2022-01-09 02:13:49 【问题描述】:我正在构建一个简单的食谱应用程序,到目前为止我有两个模型: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
.
编辑 我的进口:
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```
【问题讨论】:
【参考方案1】:尝试将on_delete=CASCADE
替换为on_delete=models.CASCADE
如果您尚未将CASCADE
与models
分开导入。
不过,在这种情况下,您应该会收到“未定义 CASCADE”的警告。
【讨论】:
抱歉,我忘记在顶部包含我的导入:from django.db.models.deletion import CASCADE
【参考方案2】:
我相信我发现了问题:我的models.py
文件在根目录中,而不是在应用程序目录中。
【讨论】:
以上是关于当我在同一个模型中引用一个类时,为啥 Django 会给我一个 ValueError?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我不能将 __getattr__ 与 Django 模型一起使用?