2017-11-17 17 views
0

私は私が私の更新ビューできれいなロジックを複製する必要がなく、簡単な更新時に同じクリーンな方法をトリガーするにはどうすればよい更新時にモデルからクリーンメソッドをトリガーする方法は?

def clean(self): 
    model = self.__class__ 
    if self.unit and (self.is_active == True) and model.objects.filter(unit=self.unit, is_terminated = False , is_active = True).exclude(id=self.id).count() > 0: 
     raise ValidationError('Unit has active lease already, Terminate existing one prior to creation of new one or create a not active lease '.format(self.unit)) 

私のモデルで定義されたデータの検証を行い、私のフォームを保存しますか?(私は私はちょうど

Unit.objects.filter(pk=term.id).update(is_active=False) 
+3

あなたはおそらく、これを行うことはできません。 –

答えて

1

update)任意のフォームなしで更新を行うビューは、モデルのsaveメソッドを呼び出すことはありませんので、それは、この場合にValidationError例外を発生させるためのジャンゴのためにことはできません。

更新する前に、モデルのfull_cleanメソッドを呼び出す必要があります。

このようなのでしょうか?

unit = Unit.objects.get(pk=term.id) 
unit.is_active = False  

try: 
    unit.full_clean() 
except ValidationError as e: 
    # Handle the exceptions here 

unit.save() 

参考: `update`を呼び出したときには、インスタンスをロードせずにデータベースに直接起こるようhttps://docs.djangoproject.com/en/1.11/ref/models/instances/#validating-objects

関連する問題