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