2017-09-20 4 views
1

私のモデルにフィールドを追加しました。しかし、カスタムSQLクエリ(Alter Field)を使用してDBのモデルにフィールドを追加しました。今度は他のMigrationファイルを作成しようとすると、DjangoはDB内のそのモデルにフィールドを追加するための移行を作成します。 Djangoはこれをしないようにするには?モデルフィールドがDjangoで検出されないカスタムSQLを使用して追加されました

別のフィールドへの参照を追加する前に、フィールドの照合順序を変更する必要がありました。 Django Alter Fieldはテーブル追加フィールドAlterTableを変更します - 参照を追加します 私はテーブルの追加 - フィールドの追加、フィールドの照合の変更、AlterTable - 参照の追加をしたがっています。 カスタムSQLクエリは、移行ファイル内に書き込まれます。

+0

なぜあなたは、移行にそのカスタムSQLを入れていませんか?それが彼らのためのものです。 –

+0

カスタムSQLは、移行ファイルにあります。 –

答えて

1

RunSQLを使用すると、適切な照合順序でフィールドを作成できます。 RunSQLを呼び出すときにstate_operations引数を使用して、Djangoを最新の状態に保つようにSQLコードを変更します。

ここではDjangoのドキュメントからの例です:

from django.db import migrations 

class Migration(migrations.Migration): 

    operations = [ 
     migrations.RunSQL(
      "ALTER TABLE musician ADD COLUMN name varchar(255) NOT NULL;", 
      state_operations=[ 
       migrations.AddField(
        'musician', 
        'name', 
        models.CharField(max_length=255), 
       ), 
      ], 
     ), 
    ] 
0

djangoが唯一の変更としてそのフィールドを作成している移行を作成するようにします。その後、--fakeフラグを使用して、移行がすでに実行されていることをデータベースに伝えます。

./manage.py migrate --fake [app] [migration number]

後日、またはカスタム後方あなたのSQLの移行のためのコードを書いた場合は、すべての移行をステップ実行している場合、これは問題を引き起こす可能性があります。

関連する問題