为什么我收到一个不可为null的字段错误,并且要更正给用户ForeignKey以将表彼此关联



这是我的代码,我一直收到错误!

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属性,也没有将其设为nullblank,django会警告您提供默认值,因为the database needs something to populate existing row,如果当时插入了行,则django希望在该字段中填充这些行,因为它不是null,不能是nullblank,即使表为空,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)

最新更新