2017-11-21 5 views
1

私は別の人の仕事からマイグレーションを受け取りました。私はバージョンによって制御されているコードベースで作業しています。私は新しいフィールドを追加した後にマイグレーションファイルを作成しましたが、問題はデータマイグレーション(0003_datamigration_initial_service_configuration.py)の前に作成され、get_or_create()はリストの先頭で実行され、マイグレーションファイルのデータは最終既に開発された移行を変更すべきではありません。Djangoにデータマイグレーションが既にある場合、モデルに新しいフィールドを追加するにはどうすればいいですか?

これは移行

  • 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

のですか?

+0

Stack OverflowはMarkdownを使用していますので、あなたの質問にすべてのHTMLタグが必要なわけではありません。 – Alasdair

答えて

2

直接インポートする代わりにMyModelモデルを取得するには、apps.get_modelを使用する必要があります。

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を使用します。

+0

私は試しましたが、私は次のようなエラーがありました:app_label、model_name = app_label.split( '。') ValueError:アンパックするために1つ以上の値が必要 – Natacha

+0

'get_model()'を呼び出すときにアプリケーションとモデルを指定する必要があります。 。 – Alasdair

関連する問題