Django:更复杂的唯一性约束?

时间:2011-09-07 11:02:02

标签: python sql django

在我的模特中:

class MyModel(models.Model):
  active = models.BooleanField()
  path = models.CharField(max_length = 512)

我想限制'path'属性在active为True的实例中是唯一的。

似乎覆盖save()可能不起作用,就像两个保存同时完成一样,两者都可以通过测试并继续保存。是否有一些技巧或自定义SQL(我正在使用MySQL)我可以在数据库级别使用这样的条件uniqness约束?

1 个答案:

答案 0 :(得分:2)

您可能正在寻找的是模型验证。这是在1.2中引入的,并且有很好的文档记录。 Django Models Instances : Validating Objects

虽然您可以编写一些棘手的SQL来执行此操作,但只要数据库行都是通过Django ORM创建的,那么模型验证就是更易于维护的解决方案。

除此之外:我对如何在数据库级别执行此操作感兴趣,缺少一定级别的预提交触发器。依赖于另一个值的一个值的唯一性是我没有看到的模式。在active + path上有一个2字段唯一约束,对于给定的路径值,允许1个false,1个true和任意数量的NULL活动行(假设active是可为空的,例如NullBooleanField将提供)。