2016-11-30 3 views
0

私は、postgresqlデータベースを使用してdjangoのテーブルモデルに制約を設定しようとしています。djangoモデルでテーブル制約を「延期可能」に設定するにはどうすればよいですか?

私はこの文ではPostgreSQLを経由してそれを行うことができます。

ALTER TABLE public.mytable ADD CONSTRAINT "myconstraint" UNIQUE(field1, field2) DEFERRABLE INITIALLY DEFERRED; 

しかし、私は、Djangoのモデルを経て、それをやりたいです。 djangoの公式ドキュメントを読む関連するものは見つかりませんでした。

class Meta: 
    unique_together = (('field1', 'field2',), DEFERRABLE INITIALLY DEFERRED) 

それはこのような何かをすることは可能です:

私はこのようなものが必要?

+0

https://gist.github.com/twidi/3353095d2a9b7b83b247特定DjangoのDBバックエンドを作成することによって、(PostgreSQL用)ジャンゴで Deferable一意性制約 –

答えて

1

ジャンゴではサポートされていません。

カスタムSQLで実行できます。あなたのmodels.pyでは、この追加:私は、過去にそのようなことをやったが、

from django.db import connection 
from django.db.models.signals import post_migrate 

def after_migrate(sender, **kwargs): 
    cursor = connection.cursor() 
    cursor.execute('ALTER TABLE public.mytable ALTER CONSTRAINT ' 
        'myconstraint DEFERRABLE INITIALLY DEFERRED') 

post_migrate.connect(after_migrate) 

を、私は長年にわたって、私は特定のRDBMSから私の仕事は単純で独立しておくことを好むことがわかりました。たとえば、開発を非常に簡単にするため、実際にSQLiteをサポートしたいと考えています。デザインが少し変わると、しばしばそのようなものを取り除くことができます。

+0

https://www.postgresql.org/docs/current/static /sql-altertable.html "ALTER CONSTRAINT このフォームは、以前に作成された制約の属性を変更します。現在、外部キー制約のみが変更される可能性があります。 –

関連する問題