ジャンゴでカスタムpgsqlの種類を作成するための正しい方法
-
20-08-2019 - |
質問
(表は、このタイプを使用することができるように)
毎回データベースをsyncdbの実行で作成されるように、Djangoアプリケーション用のカスタムpgsqlの種類を作成するための正しい方法は何ですか、すべてのカスタムタイプが前に任意のテーブルを作成するために作成されます?
私はまた、ジャンゴ・進化を使用しますが、それは適切な解決策ではない - それはsyncdbの実行後に実行されます。
...私は、標準的なフィールドタイプとモデルを定義して、タイプを作成し、進化の列タイプを変更するなどの回避策をやって想像することができますが、それは間違いなく素晴らしく、ソートのあいまいではありません任意のアイデア?
解決
私はジャンゴでこれを行う方法があります信じていません。あなたはおそらく知っているように、post_syncdb
信号が、pre_syncdb
のための無信号があります。
だから私は2つだけの選択肢があると思う:ジャンゴにpre_syncdb
信号をハッキングやファブリックのような自動化ツールを使用しますます。
それは、これを行うための正しい方法、おそらく単純なことではないだろうだ場合でも、独自のpre_syncdb
信号をハッキングして、あなたはそれぞれの新しいDjangoのリリースをパッチを維持する必要があります。
一方、だけでなく、ファブリック、単純なような自動化ツールですが、それはあなたのプロジェクトに他の利点を提供しています。
例として、私のFabfileの部分は次のようになります
def createdb():
"Create a clean database"
run('createdb --encoding=UNICODE $(db_name) -O $(db_owner) -U $(db_owner)')
run('python manage.py syncdb --noinput')
ちょうどsyncdbの実行前に、このようなものを追加します:
run('psql -U $(db_owner) $(db_name) < app/sql/custom_types.sql')
とあなただけ入力して行くために良いことがあります:
$ fab createdb
または
$ fab cluster createdb
cluster
と呼ばれる自分の環境に記載されているすべてのマシン上でコマンドを実行します。
所属していません StackOverflow