2016-05-08 7 views
0
class Test(models.Model): 
    name = models.CharField(max_length=100) 

class TestToExample(models.Model): 
    example1 = models.ForeignKey(Test,related_name='example1')  
    example2 = models.ForeignKey(Test,related_name='example2') 

ここで私はexample1をTestに、Example2をTestに追加することができます。例1 & 2は、同じ値のテストを持つべきではありません。Djangoモデル同じモデルへの外部キー私は私の例で同じモデルを追加できないはずです

答えて

1

あなたは、モデルのsave()メソッドオーバーライドすることができます。

class TestToExample(models.Model): 
    example1 = models.ForeignKey(Test,related_name='example1')  
    example2 = models.ForeignKey(Test,related_name='example2') 

    def save(self, force_insert=False, force_update=False, 
      using=None, update_fields=None): 
     assert self.example1 != self.example2 
     # Or: 
     # if self.example1 == self.example2: 
     #  raise WhateverError 
     super(TestToExample, self).save(
      force_insert=force_insert, force_update=force_update, using=using, 
      update_fields=update_fields) 

これは、一般的に、これまで(bulk_create()経由でインスタンスを作成するための例外を除いて)、無効なモデル状態を持っているあなたを禁止します。

class TestToExample(models.Model): 
    ... 
    def clean(self): 
     if self.example1 == self.example2: 
      raise ValidationError('example1 and example2 must be different') 
     super(TestToExample, self).clean() 
:あなたが管理者を介して、またはモデルフォームを通じてインスタンスを保存する場合は、代わりに内部サーバエラーの適切なエラーメッセージを提供するために、(​​を参照)モデルの clean()メソッドをオーバーライドして、そこ ValidationErrorを上げたほうが良いかもしれません
+0

おかげでそれは働いた:) –

関連する問題