2015-10-22 84 views
0

林正試圖挽救MyModel實例只有當條件滿足,在我來說,我想保存只是如果我的模型字段的子對象是相等的,例如:Django的模型不保存,如果條件得到滿足

def save(self, *args, **kwargs): 
     if self.field1.obj == self.field2.obj: 
      super(MyModel, self).save(*args, **kwargs) 

我試過上面的代碼,當obj在字段不一樣的時候它仍然保存。

  1. 爲什麼從超級保存方法沒有被調用時它仍然保存?
  2. 是否可以在我的示例上設置else語句來明確指示不要保存
+0

它不應該保存。在python中比較兩個相等的對象也是非常簡單的,你可以實現。爲什麼它的價值你可以做別的:提高異常,看看是否被稱爲 –

+0

節省方法?在管理員?不幸的是有很多方法可以繞過Django的'model.save()'方法,包括多個管理操作。 Condiser也['QuerySet.update()'](https://docs.djangoproject.com/en/1.8/ref/models/querysets/#django.db.models.query.QuerySet.update)。 –

回答

0

感謝所有您的意見,在我的測試我使用

modelInstance = MyModelFactory.create(field1=field1, field2=field2) 
assertNotIsInstance(modelInstance, MyModel) 

即使它不保存到數據庫不知何故,它總是返回一個未保存的實例。

當我更新我的測試來檢查。

assertEqual(0, MyModel.objects.count()) 

它工作。

對不起,這個菜鳥問題。