【问题标题】:Model.save() not called on update()未在 update() 上调用 Model.save()
【发布时间】:2020-01-28 20:31:11
【问题描述】:

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

【问题讨论】:

    标签: django django-models


    【解决方案1】:

    根据文档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()
    

    【讨论】:

      猜你喜欢
      • 2011-12-14
      • 1970-01-01
      • 2014-03-31
      • 2012-09-04
      • 1970-01-01
      • 1970-01-01
      • 2012-07-04
      • 2014-05-23
      • 2011-05-25
      相关资源
      最近更新 更多