如何在django模型中设置表约束“可延迟初始延迟”?
问题描述:
我想在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)
是否有可能做这样的事情?
答
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 此表单改变先前创建的约束的属性,目前只有外键约束可能会改变。” –
https://gist.github.com/twidi/3353095d2a9b7b83b247通过创建特定django的分贝后端在Django(PostgreSQL的) 缓征者唯一约束 –