2016-10-25 11 views
1

私はdjangoアプリケーションと移行ファイル002_auto.pyを持っています。Django RunPythonを使ってデータベースを変更しています。私は将来どのくらいのファイルが作成されるかわからないが、ファイル002_auto.pyを移行プロセスの最後の部分として適用したい。djangoの移行を常に最後に適用する方法

いずれかの手動手順に私は(私は新しいマイグレーションを追加しましたたびに、または dependencies変数を変更すること) migrateコマンドを実行するたびに実行する必要なく、Djangoの移行を実行しながら、マイグレーションは、最後の一つとして実行されることを設定する方法

p.s.私はdjangoの移行に関するドキュメントやその他の記事を成功裏に見てきました。

+1

これはなぜ必要なのですか?第1の場所での移行を使用するというアイデアには多少の違いがあります。 – FeedTheWeb

答えて

1

おそらくpost_migrate信号をモデルの1つに使用し、002_auto.pyというコードをhanlderに送信することができます。あなたはmigrateコマンドをサブクラス化し、superコール

# project/myapp/management/commands/custom_migrate.py 
from django.core.management.commands.migrate import Command as MigrateCommand 

class Command(MigrateCommand): 
    def handle(self, *args, **options): 
     super().handle(*args, **options) 
     # put your code from 002_auto.py here 

このコマンドの後に、このコードを置くことができる

https://docs.djangoproject.com/en/1.10/ref/signals/#post-migrate

+0

不幸にも、RunPythonがデータベースを変更するので、不幸にもpost_migrateを使用すると禁止されます。 –

+0

OK、必要なロジックをraw-SQLクエリに入れることができますか? –

2

は、あなたのINSTALLED_APPSにあるアプリに追加する必要があります。そして、あなたは

python manage.py custom_migrate 

このようにすると、カスタムの詳細を読むそれを呼び出すことができますことは、移行した場合 https://docs.djangoproject.com/en/1.10/howto/custom-management-commands/

+0

custom_migrateを別々に呼び出すことを避ける方法はありますか( 'migrate'の実行中に呼び出すのですか? –

+0

@AndriyIvaneykoもし' migrate'という名前をつけて、manage.pyが 'migrate'それはうまくいくはずですが、私はチェックしませんでした。 –

1

コマンド特定の順序で適用する必要があり、その後、これまでに関係なく、どんなの(仕事に行くされていないことあなたが試したハッキーな解決策)。

将来的には、この最後のことが意味をなさないことを意味する変更を導入する可能性があります。

あなたの最善の選択肢は、カスタム管理コマンドやbashスクリプトを作成し、それを使用してデータベースを移行および変更することです。

関連する問題