0

我有一个模型:

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

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

 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 ?

4

1 回答 1

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)
于 2010-06-30T19:39:10.063 回答