2016-11-30 106 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的分貝後端在Django(PostgreSQL的) 緩徵者唯一約束 –

回答

1

Django不支持。

您可以使用自定義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 此表單改變先前創建的約束的屬性,目前只有外鍵約束可能會改變。」 –