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
我创建了一个 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