有没有像unique_together(max_occurences = 3)?

时间:2010-06-30 16:20:48

标签: sql mysql django django-orm

我有一个模特:

 class MyModel(models.Model):
     a = models.IntegerField()
     b = models.IntegerField()
     c = models.IntegerField()

现在,我需要将类似unique_together(a,b, max_occurences=3)约束的内容添加到上面的模型中(这样每对(a,b)最多可以有c个值,理想情况下那些c的3个值对于给定的(a,b)也应该是唯一的,但是我不知道要寻找什么(如果在MySQL中甚至存在这样的东西)。有什么类似的东西,或者我必须做这样的事情:

 class MyModel(models.Model):
     a = models.IntegerField()
     b = models.IntegerField()

     c1 = models.IntegerField()
     c2 = models.IntegerField()
     c3 = models.IntegerField()

     class Meta:
         unique_together = ('a', 'b')

- 自己处理c1..c3?

1 个答案:

答案 0 :(得分:0)

您应该覆盖模型的save()方法并在每次保存之前检查约束,如果违反约束则引发ValueError。

 class MyModel(models.Model):
     a = models.IntegerField()
     b = models.IntegerField()
     c = models.IntegerField()

     def save(self):
         try:
             # Check values in model here
         except:
             raise ValueError("Cannot save more than 3 Cs with an A")
         super(MyModel, self).save(*args, **kwargs)