Как проверить, является ли один из двух FK нулевым? - PullRequest
0 голосов
/ 10 ноября 2011

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

class MyModel(models.Model):
    field_1 = models.ForeignKey(FirstModel)
    field_2 = models.ForeignKey(SecondModel)

И я хочу отобразить форму, в которой могут быть установлены оба поля, но только одно поле одновременно, в противном случае ошибка возврата проверки.

Как это сделать (желательно в модели)?

Ответы [ 2 ]

3 голосов
/ 10 ноября 2011
class MyModel(models.Model):
    field_1 = models.ForeignKey(FirstModel)
    field_2 = models.ForeignKey(SecondModel)

    def clean(self):
      num = filter(lambda e:e,[self.field_1, self.field_2])
      if len(num) != 1:
         raise ValidationError("only one attribute should be set")
1 голос
/ 10 ноября 2011

Если вы спросите меня, я думаю, что это более чистое решение:

class MyModel(models.Model):
    field_1 = models.ForeignKey(FirstModel)
    field_2 = models.ForeignKey(SecondModel)

    def clean(self):
      if not bool(field_1) ^ bool(field_2): # Using python exclusive-or (^)
         raise ValidationError("Only one attribute should be set")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...