当我已经在Django中进行数据迁移时,如何在模型中添加新字段?

时间:2017-11-21 11:41:31

标签: python django python-3.x django-migrations

我的迁移来自另一个人的工作,我也在使用该版本控制的代码库。我在添加新字段后创建了一个迁移文件,但问题出在数据迁移(0003_datamigration_initial_service_configuration.py)之前,通过函数get_or_create()在列表的头部执行之前创建,而我的迁移文件数据最后我不应该改变已经开发的迁移。

这是我的迁移列表

  • 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),
    ]

Rhe错误为no such column named new_field

如何在不编辑任何数据迁移的情况下解决问题?

1 个答案:

答案 0 :(得分:2)

您应该使用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将使用正确的字段加载模型的历史版本。

相关问题