Есть ли что-то вроде unique_together (max_occurences = 3)? - PullRequest
0 голосов
/ 30 июня 2010

У меня есть модель:

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

Теперь мне нужно добавить что-то вроде ограничения unique_together(a,b, max_occurences=3) в вышеприведенную модель (так что может быть до 3 значений c для каждойпара (a, b) и в идеале эти 3 значения c также должны быть уникальными для данного (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 голосов
/ 30 июня 2010

Вам следует переопределить метод 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)
...