2017-01-05 5 views
2

テーブルを作成した後にフィールドにdb_index=Trueを追加するDjangoモデルがあります。Django:db_indexを既存のテーブルに追加する

私はDjangoが移行を作成しないので、インデックスは作成されないことを理解しました。テーブルが存在せず、最初に作成された場合、Djangoはインデックスを作成します。

私はDjango : db_index and makemigrationsと読みましたが、手動で移行ファイルを作成することをお勧めしますか?

私はMySQLを使用しています。これについてDjangoのベストプラクティスは何ですか?

+0

マカミゲーションを行うときには、Djangoが確実にマイグレーションを作成するはずです。 –

+0

それはありませんし、他のポストの著者もそれを経験しています。 – Daniel

答えて

5

はい。それは完全に大丈夫で、受け入れられますし、(時には)これを手書きのマイグレーションを使うこともベストプラクティスです。これらのタイプの問題のためだけに空白の移行を作成する特別なコマンドもあります。

python manage.py makemigrations --empty --name create_table_index 

そして、ちょうどあなたのリンクに掲載の例のように編集:ミッションクリティカルなアプリケーションにある表の場合は

class Migration(migrations.Migration): 

    dependencies = [ 
     ('your_app', '0001_initial'), # or last mig 
    ] 

    operations = [ 
     migrations.RunSQL("CREATE INDEX idx_column ON my_table (my_column)"), 
     # this format should also work for mysql 
    ]  

を、いくつかのオペレーションチームがなるように手でインデックスを追加することを好みますインデックスを作成することがアプリに与える影響のタイミングをより詳細に制御できます。しかし、それは通常チームの嗜好の問題です。

+1

あなたの答えをありがとう。私はそれを試みます。私はちょうどDjangoの 'makemigrations'が気にしないことが奇妙に思えます。私は、プロジェクトの後の段階でインデックスを追加するのはかなり一般的なケースだと思います。 – Daniel

+0

それは完全に動作します。あなたの説明をありがとう。 – Daniel

+1

これにたいするgonaのコメント... django makemigrations事実の後にインデックスを追加することを明確にサポートしています。私は同じだと思いましたが、外界関連のフィールドにインデックスを追加しようとしていて、djangoがこれらのフィールドを自動的にインデックスしていることが分かりましたので、db_index = Trueを設定してmakemigrationsを実行すると、 – bryan60

関連する問題