cgt*_*mky -1 python migration django django-1.11
例如,我在Django项目中有一个模型(出于参数的缘故,它称为“ app”);
class ModelA(models.Model):
fieldA = models.IntegerField(default=0)
Run Code Online (Sandbox Code Playgroud)
而且我可以运行python manage.py makemigrations应用程序;这给了我
Migrations for 'app':
app/migrations/0001_initial.py
- Create model ModelA
Run Code Online (Sandbox Code Playgroud)
如果我然后向ModelA添加一个新字段,则它看起来像;
class ModelA(models.Model):
fieldA = models.IntegerField(default=0),
fieldB = models.IntegerField(default=1)
Run Code Online (Sandbox Code Playgroud)
然后再次运行makemigrations。
Migrations for 'app':
app/migrations/0002_auto_20170529_1737.py
- Remove field fieldA from modela
- Add field fieldB to modela
Run Code Online (Sandbox Code Playgroud)
自动生成的文件将对此进行备份;
operations = [
migrations.RemoveField(
model_name='modela',
name='fieldA',
),
migrations.AddField(
model_name='modela',
name='fieldB',
field=models.IntegerField(default=1),
),
]
Run Code Online (Sandbox Code Playgroud)
为什么要删除fieldA?
我的理解是,应该只对模型进行脚本更改,即已添加fieldB。
问题是您在添加fielda时在行中添加了逗号fieldb:
fieldA = models.IntegerField(default=0),
Run Code Online (Sandbox Code Playgroud)
您应该删除逗号并删除0002迁移。然后,当您重新运行时makemigrations,Django将不再尝试删除fielda。