在django中向现有模型添加新字段

w1jd8yoj  于 2023-08-08  发布在  Go
关注(0)|答案(3)|浏览(140)

我在Django中创建了一个模型。移民了,然后忘了我错过了一个领域。我已经在(author)中添加了该字段,现在我收到一个错误。
我试着再做一次迁移,但我得到这个... gitpod /workspace/bookends(main)$python3 manage.py makemigrations books您正在尝试将不可为空的字段“author”添加到没有默认值的图书中;我们不能这样做(数据库需要一些东西来填充现有的行)。请选择修复:
1.立即提供一次性默认值(将在此列具有空值的所有现有行上设置)
1.退出,并让我在models.py中添加默认值选择一个选项:
当我在管理员中运行服务器,然后单击书籍时,我收到此错误消息。enter image description here
这是我的型号代码enter image description here
这是我的admin.py代码enter image description here

zynd9foi

zynd9foi1#

自上次迁移以来,每次修改模型时,都需要创建一个新模型。它们是关于数据库应如何更改的说明。
在这种情况下,您可能希望向表中的现有条目添加新字段,这意味着迁移不知道将什么设置为以前没有的条目的新字段的值。这正是这个错误消息告诉你的。

You are trying to add a non-nullable field 'author' to books without a default; we can't do that (the database needs something to populate existing rows). Please select a fix:

Provide a one-off default now (will be set on all existing rows with a null value for this column)

Quit, and let me add a default in models.py Select an option:

字符串
这是一个提示,要求您为cli或models.py代码中的现有条目选择默认值。你应该按照它的指示或找到一个教程在线如果他们仍然似乎混乱。

mzaanser

mzaanser2#

您可以在字段中添加下一个参数来解决“问题”:
第一个月

cpjpxq1n

cpjpxq1n3#

当你创建一个模型并进行迁移时,Django会在你的数据库中为该模型创建一个表,表中的字段在你的模型中当前。然后可以创建该模型的新对象。这些对象的初始字段中填充了值。向模型中添加新字段时,旧对象没有该字段。所以当你尝试将新字段添加到旧对象时,Django不知道如何为旧记录填充新字段。它应该让它们为空,还是应该用您给定的默认值填充它们?您可以为新字段设置默认值:

new_field = models.SomeField(default=<your default value>)

字符串
这将使用默认值填充旧记录的新字段。
或者,由于默认情况下字段不能为空,因此可以将新字段的nullblank设置为True:

new_field = models.SomeField(null=True, blank=True)

相关问题