Django:没有默认值的不可为空字段

问题描述 投票:0回答:6

在 Django 中,我在以下 models.py 文件上使用

manage.py makemigrations
manage.py migrate

class Family(models.Model):
    comment1 = models.CharField(max_length=80)
    #comment2 = models.CharField(max_length=80)

成功初始化后,我将 models.py 更改为(我只是取消注释新模型字段,它基本上是其他模型字段的副本):

class Family(models.Model):
    comment1 = models.CharField(max_length=80)
    comment2 = models.CharField(max_length=80)

现在,当我再次尝试

makemigrations
时,我收到以下错误

您正在尝试向系列添加一个不可为空的字段“评论”,但没有 默认值;我们不能这样做(数据库需要填充一些东西 现有行)。

请选择修复:

1)立即提供一次性默认值 (将在该列具有空值的所有现有行上设置)

2)退出,让我在 models.py 中添加默认值 选择一个选项:

为什么我一开始在初始化时没有收到此错误?

python django django-models null field
6个回答
3
投票

其他人是对的。您应该为该字段设置默认值。 但有一个技巧可以解决这个问题。但这不是一个好方法......除非你别无选择。
1.评论你所有的桌子
2. 运行

makemigrations
migrate

3.取消注释你的表
4.2.再次运行
makemigrations
migrate


3
投票

image1=models.ImageField(upload_to='app/image12',help_text="hi", null=True)

即在字段中设置

null= True'

当您在存储数据库后更改模型时会发生这种情况。


0
投票

如果你想让它在没有默认值的情况下不可为空。 创建迁移文件时,您必须为同一字段提供值。这就是为什么它要求这个选项。在 python manage.py makemigrations 时在终端中输入“1”,然后为之前保存的行(如果有)的字段提供一个值。

请告诉我这是否有帮助。


0
投票

就我而言,我遇到了同样的问题:

关注警报:

...不可为空的字段“评论”给家人...

  • 型号:家庭
  • 字段:评论

只需在模型族的字段注释中再添加一个属性即可:

default=''

0
投票

只需选择选项

1
。然后设置默认值。 它将创建一个具有属性
preserve_default=False
的迁移脚本,这意味着默认值仅用于迁移。它不会影响数据库中的默认设置。

https://docs.djangoproject.com/en/4.2/ref/migration-operations/#alterfield


-1
投票

您可以添加:

default=None
default="something"
add null=True
blank=True

© www.soinside.com 2019 - 2024. All rights reserved.