2016-10-07 57 views
1

我添加了一個save()方法我Model,更新一些時間戳:Model.save()不要求更新()

class Order(models.Model): 
    deliveredtime = models.DateTimeField(blank=True, null=True, default=None) 
    status = models.CharField(default='NEW', max_length=20) 

    def save(self, *args, **kw): 
     if self.status == "DELIVERED" and self.deliveredtime is None: 
      self.deliveredtime = timezone.now() 

     super(Order, self).save(*args, **kw) 

但我發現名單上調用update此方法時,不叫的對象:

Order.objects.filter(status='WAITING FOR DELIVERY').update(status='DELIVERED') 

如何觸發此更新對Order類的任何對象的任何更改?

回答

4

根據文檔here

最後,實現更新()不更新在SQL級別,因此,不調用任何save()方法在你的模型,也沒有發出pre_save或post_save信號(這是調用Model.save()的結果)。如果您想更新一堆記錄,有一個自定義的保存()方法的模型,環比他們並調用保存()

所以這將工作:

for order in Order.objects.filter(status='WAITING FOR DELIVERY'): 
    order.status = 'DELIVERED' 
    order.save() 
相關問題