1

データベースがsyncdbで作成されるたびに、テーブルを作成する前にすべてのカスタムタイプが作成されるように(テーブルがこのタイプを使用できるように)、djangoアプリケーション用のカスタムpgsqlタイプを作成する正しい方法は何ですか?

私も django-evolution を使用していますが、これは適切な解決策ではありません。syncdb の後に実行されます。標準フィールド型でモデルを定義し、進化の中で型を作成して列型を変更するなどの回避策を実行することは想像できますが、それは間違いなく良くなく、あいまいです...

何か案が?

4

1 に答える 1

1

Djangoでこれを行う方法があるとは思いません。おそらくご存じのとおり、信号はありますが、 にはpost_syncdb信号がありませんpre_syncdb

したがって、Django に信号をハッキングするか、 Fabricpre_syncdbのような自動化ツールを使用するという2 つのオプションしかないと思います。

独自のシグナルをハッキングするpre_syncdbことは、それが正しい方法であっても、おそらく簡単ではなく、新しい Django リリースごとにパッチを維持する必要があります。

一方、Fabric のような自動化ツールは単純であるだけでなく、プロジェクトに他の利点をもたらします。

例として、私の 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

于 2009-06-29T06:50:00.793 に答える