Django 迁移删除字段
Django Migrations removing field
所以我在我的 Django 项目中有一个模型(为了参数称为 'app'),例如;
class ModelA(models.Model):
fieldA = models.IntegerField(default=0)
我可以 运行 python manage.py makemigrations 应用程序;这给了我
Migrations for 'app':
app/migrations/0001_initial.py
- Create model ModelA
如果我然后向 ModelA 添加一个新字段,它看起来像;
class ModelA(models.Model):
fieldA = models.IntegerField(default=0),
fieldB = models.IntegerField(default=1)
然后 运行 再次 makemigrations,我明白了;
Migrations for 'app':
app/migrations/0002_auto_20170529_1737.py
- Remove field fieldA from modela
- Add field fieldB to modela
自动生成的文件对此进行了备份;
operations = [
migrations.RemoveField(
model_name='modela',
name='fieldA',
),
migrations.AddField(
model_name='modela',
name='fieldB',
field=models.IntegerField(default=1),
),
]
为什么要删除字段A?
我的理解是它应该只对模型进行脚本更改,即
该字段 B 已添加。
问题是您在添加 fieldb
:
时向 fielda
行添加了一个逗号
fieldA = models.IntegerField(default=0),
您应该删除逗号并删除 0002
迁移。然后,当您重新运行 makemigrations
时,Django 将不再尝试删除 fielda
.
我没有看到整个 class 表示您的字段,但如果有同名的 @属性 方法,似乎可以从迁移过程中省略或删除一个字段作为你的领域。
因此,下面的代码将从数据库中删除 fieldA
class ModelA(models.Model):
fieldA = models.IntegerField(default=0)
@property
def fieldA(self):
pass
并且您应该重命名您的字段或方法:
class ModelA(models.Model):
_fieldA = models.IntegerField(default=0)
@property
def fieldA(self):
pass
所以我在我的 Django 项目中有一个模型(为了参数称为 'app'),例如;
class ModelA(models.Model):
fieldA = models.IntegerField(default=0)
我可以 运行 python manage.py makemigrations 应用程序;这给了我
Migrations for 'app':
app/migrations/0001_initial.py
- Create model ModelA
如果我然后向 ModelA 添加一个新字段,它看起来像;
class ModelA(models.Model):
fieldA = models.IntegerField(default=0),
fieldB = models.IntegerField(default=1)
然后 运行 再次 makemigrations,我明白了;
Migrations for 'app':
app/migrations/0002_auto_20170529_1737.py
- Remove field fieldA from modela
- Add field fieldB to modela
自动生成的文件对此进行了备份;
operations = [
migrations.RemoveField(
model_name='modela',
name='fieldA',
),
migrations.AddField(
model_name='modela',
name='fieldB',
field=models.IntegerField(default=1),
),
]
为什么要删除字段A?
我的理解是它应该只对模型进行脚本更改,即 该字段 B 已添加。
问题是您在添加 fieldb
:
fielda
行添加了一个逗号
fieldA = models.IntegerField(default=0),
您应该删除逗号并删除 0002
迁移。然后,当您重新运行 makemigrations
时,Django 将不再尝试删除 fielda
.
我没有看到整个 class 表示您的字段,但如果有同名的 @属性 方法,似乎可以从迁移过程中省略或删除一个字段作为你的领域。 因此,下面的代码将从数据库中删除 fieldA
class ModelA(models.Model):
fieldA = models.IntegerField(default=0)
@property
def fieldA(self):
pass
并且您应该重命名您的字段或方法:
class ModelA(models.Model):
_fieldA = models.IntegerField(default=0)
@property
def fieldA(self):
pass