假设我有以下模型:
class Test(models.Model):
field_one = models.CharField(max_length=80)
现在,我们在field_one
字段中创建了2-3个Model对象。
p1 = Test(field_one="Object1")
p1.save()
p2 = Test(field_one="Object2")
p2.save()
后来,我意识到我需要在field_two
模型中添加另一个字段Test
。
class Test(models.Model):
field_one = models.CharField(max_length=80)
field_two = models.IntegerField(default=3)
makemigrations
和migrate
并正在运行服务器。这将提示以下错误
django.db.utils.ProgrammingError: column mainapp_test.field_two does not exist
2
中的PostGresDB
现有对象没有field_two
列。有什么有效的方法可以将field_two
列添加到具有某些默认值的现有对象中?或如何解决这个问题?
Django版本:2.0 Django ORM DB:PostGresql
答案 0 :(得分:1)
将字段添加到现有模型时,必须在代码中提供默认值,或者将其设置为null / blank = True,或者在迁移时提供一次性的默认值。
由于您要在代码中提供默认设置,因此迁移应该没有问题。至少根据经验,我已经向具有数千个条目的现有模型中添加了带有default=False
的几个BooleanField,并且从未遇到ProgrammingError。
您是否尝试过在运行makemigrations
和migrate
之前关闭Postgres后端?我认为Django会做到这一点,但这是我唯一能想到的。另外,显然,如果Django服务器仍在运行,请关闭它。