2016-07-08 72 views
1

我有兩種型號。當我從第一個保存實例時,我需要從此模型發送一個字段值到另一個字段中。避免在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. 

恕我直言,你並不需要做的一切,並可以使用Validators檢查是否需要你要保存的數據。如果您有一個form保存數據,然後使用表單驗證來停止保存數據。