Django迁移删除字段

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。

Ala*_*air 5

问题是您在添加fielda时在行中添加了逗号fieldb

fieldA = models.IntegerField(default=0),
Run Code Online (Sandbox Code Playgroud)

您应该删除逗号并删除0002迁移。然后,当您重新运行时makemigrations,Django将不再尝试删除fielda

  • 四年半过去了,这个答案仍然有意义,让我免于酗酒,慢慢地住在桥下。谢谢你,先生。 (3认同)