Django迁移:使用数据库后修改模型字段

时间:2019-01-30 15:24:18

标签: django postgresql django-migrations

我创建了一个Django Web应用程序,该应用程序具有模型和创建的许多模型实例。问题是我想向已经使用的模型之一添加另一个字段(有1000多个实例)。过去,我在使用Django Migrations时遇到过困难的经历,并且害怕如果我通过添加字段来修改模型,我的Web应用程序将无法运行。

如何以不影响Web应用程序功能的方式更改模型?

1 个答案:

答案 0 :(得分:1)

以下内容可以解决您的问题,而不会引起任何问题。

如果需要,可以通过检查django admin中的字段来检查数据是否已正确填充。

但是,我建议您设置一个开发环境,以便您可以测试这种情况,而不必担心它是否会在生产环境中引起问题。

我希望这会有所帮助!


初始:

Models.py

class ExampleModel(models.Model):
    name = models.CharField(blank=True, null=True)

第一次更改:

Models.py

class ExampleModel(models.Model):
    name = models.CharField(blank=True, null=True)
    unique_str = models.CharField(blank=True, null=True) # add this here

运行:

python manage.py makemigrations
python manage.py migrate

然后,您可以运行脚本来填充您的unique_str:

# get all model instances
example_models = ExampleModel.objects.all()

# update each unique_str as required
for e in example_models:
    e.unique_str = e.pk # add any required logic here to assign value to this variable
    e.save()

最后:

Models.py

class ExampleModel(models.Model):
    name = models.CharField(blank=True, null=True)
    unique_str = models.CharField(blank=True, null=True, unique=True) # add unique

然后再次运行:

python manage.py makemigrations
python manage.py migrate