如何将新字段添加到现有的Django模型postgres

时间:2019-10-16 16:33:47

标签: django postgresql django-models django-rest-framework

假设我有以下模型:

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)
  • 现在,做makemigrationsmigrate 并正在运行服务器。

这将提示以下错误

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

1 个答案:

答案 0 :(得分:1)

将字段添加到现有模型时,必须在代码中提供默认值,或者将其设置为null / blank = True,或者在迁移时提供一次性的默认值。

由于您在代码中提供默认设置,因此迁移应该没有问题。至少根据经验,我已经向具有数千个条目的现有模型中添加了带有default=False的几个BooleanField,并且从未遇到ProgrammingError。

您是否尝试过在运行makemigrationsmigrate之前关闭Postgres后端?我认为Django会做到这一点,但这是我唯一能想到的。另外,显然,如果Django服务器仍在运行,请关闭它。