没有在update()上调用Model.save()

时间:2016-10-07 10:28:53

标签: django django-models

我在save()添加了Model方法,以更新一些时间戳:

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类的任何对象进行任何更改时触发此更新?

1 个答案:

答案 0 :(得分:4)

根据文件here

  

最后,意识到update()在SQL级别进行更新,因此不会在模型上调用任何save()方法,也不会发出pre_save或post_save信号(这是调用Model的结果) 。保存())。如果要为具有自定义save()方法的模型更新一组记录,请循环遍历它们并调用save()

所以这会起作用:

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