2011-11-10 12 views
0

は私が持っているモデル:2つのFKから1つがヌルであるかどうかをチェックする方法?

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

をそして私は同時に両方のフィールドだけのフィールドが、そうでない場合は、検証リターンエラーを設定することができますフォームを表示します。

(できればモデル内で)行う方法は?

答えて

3
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

あなたは私に言わせれば、私はこれがクリーンソリューションだと思う:

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")