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

Django Migrations: Modifying Field of Model After Database in Use

我创建了一个 Django Web 应用程序,其中包含模型和创建的许多模型实例。问题是我想将另一个字段添加到已经使用的模型之一(有超过 1000 个实例)。我过去在 Django 迁移方面有过困难的经历,我害怕如果我通过添加字段修改模型,我的 Web 应用程序将无法运行。

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

以下应该可以解决您的问题而不会引入任何问题。

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

不过,我建议您为自己设置一个开发环境,这样您就可以测试这种东西,而不必担心它是否会在您的生产环境中引起问题。

希望对您有所帮助!


初始:

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