2016-07-08 1 views
1

があります。最初からインスタンスを保存するとき、このモデルから別のフィールドにフィールド値を送る必要があります。raiseを使用せずにpre_save信号にインスタンスを保存することを避ける

まずモデル:

class ModelOne(models.Model): 
    # fields... 
    quantity = models.FloatField() 

セカンドモデル:

class ModelTwo(models.Model): 
    # fields... 
    quantity = models.FloatField() 

pre_save信号:

@receiver(pre_save, sender=ModelOne) 
def verify(sender, instance, **kwargs): 
    # Stuff 
    quantity = instance.quantity 
    founded_model_two = ModelTwo.objects.get("""Something""") 
    future_result = founded_model_two.quantity - quantity 
    if future_result < 0: 
     raise Exception("Cannot be less than zero") 

私はインスタンスを保存するために避けたいが、私はしたくありません例外を発生させる

答えて

0

pre_saveのExceptionを見たくない場合は、saveメソッドで行うことができます。理想的にはpre_saveがExceptionを投げてシグナルを終了させなければならないからです。

class ModelOne(models.Model): 
    # fields... 
    quantity = models.FloatField() 


    def save(self): 
     if some_condition: 
      super(ModelOne, self).save() 
     else: 
      return #cancel the save if you return no super save object. 

IMHO、あなたはすべてのことをする必要はありませんし、あなたのデータを保存する必要があるかどうかをチェックするためにValidatorsを使用することができます。 formのデータを保存している場合は、フォームの検証を使用してデータの保存を停止します。

関連する問題