在 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 中添加默认值 选择一个选项:
为什么我一开始在初始化时没有收到此错误?
其他人是对的。您应该为该字段设置默认值。
但有一个技巧可以解决这个问题。但这不是一个好方法......除非你别无选择。
1.评论你所有的桌子
2. 运行
makemigrations
和 migrate
makemigrations
和 migrate
image1=models.ImageField(upload_to='app/image12',help_text="hi", null=True)
即在字段中设置
null= True'
。
当您在存储数据库后更改模型时会发生这种情况。
如果你想让它在没有默认值的情况下不可为空。 创建迁移文件时,您必须为同一字段提供值。这就是为什么它要求这个选项。在 python manage.py makemigrations 时在终端中输入“1”,然后为之前保存的行(如果有)的字段提供一个值。
请告诉我这是否有帮助。
就我而言,我遇到了同样的问题:
关注警报:
...不可为空的字段“评论”给家人...
只需在模型族的字段注释中再添加一个属性即可:
default=''
只需选择选项
1
。然后设置默认值。
它将创建一个具有属性 preserve_default=False
的迁移脚本,这意味着默认值仅用于迁移。它不会影响数据库中的默认设置。
https://docs.djangoproject.com/en/4.2/ref/migration-operations/#alterfield
您可以添加:
default=None
或 default="something"
或 add null=True
、blank=True
。