这是我的代码,我一直收到错误!
from django.db import models
# Create your models here.
class topics(models.Model):
topic_level = models.BooleanField()
topic_name = models.TextField()
topic_question = models.ForeignKey('questions', on_delete=models.CASCADE)
topic_answer = models.ForeignKey('answers', on_delete=models.CASCADE)
topic_image = models.ForeignKey('images', on_delete=models.CASCADE)
class questions(models.Model):
question_description = models.TextField()
questions_type = models.BooleanField()
question_answer = models.ForeignKey('answers', on_delete=models.CASCADE)
question_image = models.ForeignKey('images', on_delete=models.CASCADE)
class answers(models.Model):
description = models.TextField()
answer_image = models.ForeignKey('images', on_delete=models.CASCADE)
class images (models.Model):
image_blob = models.BinaryField()
这就是错误:
您正试图向答案添加一个不可为null的字段"answer_image"无违约;我们不能那样做(数据库需要一些东西填充现有行)。刺行)。请选择修复程序:1)提供一个一次性的默认值now(将在所有具有null的现有行上设置该列的值)2)退出,让我在models.py 中添加一个默认值
我想知道如果我添加一个默认值,它会影响表之间的关系吗?增加什么价值?随机值能起作用吗?谢谢,
您正在尝试添加不可为null的字段。因此,当您运行迁移时,django需要用一些东西填充这些字段。
使此字段为空:
answer_image = models.ForeignKey('images', on_delete=models.CASCADE,blank=True,null=True)
然后,您需要删除上一次迁移并创建新的迁移。
这很有可能,因为您之前在没有answer_image
字段的model
上生成了migration
。因此,如果您没有指定default
属性,也没有将其设为null
和blank
,django会警告您提供默认值,因为the database needs something to populate existing row
,如果当时插入了行,则django希望在该字段中填充这些行,因为它不是null
,不能是null
或blank
,即使表为空,django仍会警告您。
因此,请执行以下操作:
第一个选项
按照django在控制台中打印的提示,选择选项1并提供一个默认值来填充现有的行
编辑:该值不能是任何随机值。但数据类型为
answer_image
字段指定的images
,因此您输入了与images
对象/行相对应的foreign_key
,因为django向所有模型添加了id
字段。
或
第二种选择
将以下属性添加到answer_image
字段,如下所示:
answer = models.ForeignKey(images, null=True, blank=True, on_delete=models.SET_NULL)
然后应用您的迁移(我建议使用第二个选项,因为我假设您不希望images
表中删除的行cascading
包含answer
表中所有对应的行,因此在这种情况下,删除将设置answer_image
字段null
)