当我已经在 Django 中进行数据迁移时,如何在模型中添加新字段?
How can I add a new field in model when I already have a datamigration in Django?
我有一个迁移来自另一个人的工作,我也在一个由版本控制的代码库中。我在添加新字段后创建了一个迁移文件,但问题出在之前通过函数 get_or_create () 创建的数据迁移 (0003_datamigration_initial_service_configuration.py) 在我迁移时在列表的头部执行文件数据到底应该不会改一个已经开发的迁移
这是我的迁移列表
- 0001_initial.py
- 0002_datamigration_initial_users_list.py
- 0003_datamigration_initial_mymodel.py
- ...
- 0015.addnewfield
0003_datamigration_initial_mymodel.py:
from __future__ import unicode_literals
from django.db import migrations
from ..models import MyModel
def create_initial_mymodel(apps, schema_editor):
current_product_type, created = MyModel.objects.get_or_create()
class Migration(migrations.Migration):
dependencies = [
('myapp', '0002_datamigration_initial_users_list'),
]
operations = [
migrations.RunPython(create_initial_mymodel),
]
错误是 no such column named new_field
如何在不编辑任何数据迁移的情况下解决问题?
您应该使用 apps.get_model
获取 MyModel
模型,而不是直接导入它。
def create_initial_mymodel_forward(apps, schema_editor):
MyModel = apps.get_model('myapp', 'MyModel')
current_product_type, created = MyModel.objects.get_or_create()
使用 apps.get_model
将加载具有正确字段的模型的历史版本。
我有一个迁移来自另一个人的工作,我也在一个由版本控制的代码库中。我在添加新字段后创建了一个迁移文件,但问题出在之前通过函数 get_or_create () 创建的数据迁移 (0003_datamigration_initial_service_configuration.py) 在我迁移时在列表的头部执行文件数据到底应该不会改一个已经开发的迁移
这是我的迁移列表
- 0001_initial.py
- 0002_datamigration_initial_users_list.py
- 0003_datamigration_initial_mymodel.py
- ...
- 0015.addnewfield
0003_datamigration_initial_mymodel.py:
from __future__ import unicode_literals
from django.db import migrations
from ..models import MyModel
def create_initial_mymodel(apps, schema_editor):
current_product_type, created = MyModel.objects.get_or_create()
class Migration(migrations.Migration):
dependencies = [
('myapp', '0002_datamigration_initial_users_list'),
]
operations = [
migrations.RunPython(create_initial_mymodel),
]
错误是 no such column named new_field
如何在不编辑任何数据迁移的情况下解决问题?
您应该使用 apps.get_model
获取 MyModel
模型,而不是直接导入它。
def create_initial_mymodel_forward(apps, schema_editor):
MyModel = apps.get_model('myapp', 'MyModel')
current_product_type, created = MyModel.objects.get_or_create()
使用 apps.get_model
将加载具有正确字段的模型的历史版本。