2016-11-30 115 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 此表单改变先前创建的约束的属性,目前只有外键约束可能会改变。” –