【问题标题】:post_save error Message' has no attributepost_save 错误消息'没有属性
【发布时间】:2013-03-26 18:52:03
【问题描述】:

我第一次尝试使用信号post_save。我已阅读文档,但仍需要一些建议。

我正在尝试更新名为“charge”的模型字段。

@receiver(post_save, sender=Message)
def my_handler(sender, **kwargs):
    if not sender.charge:
        sender(charge=sender.length(sender))
        sender.save()

但是,这给出了错误 Message' has no attribute 'charge',但消息中确实存在 Charge!

【问题讨论】:

  • 请注意,因为 sender 是 Message 类本身,而不是实例,所以您的第 4 行实例化一个新消息,然后丢弃引用,而第 5 行调用 .save()在课堂上,这将失败。

标签: django django-signals


【解决方案1】:

sender 这里是Message 类本身,而不是正在保存的实例。实际实例作为关键字参数instance 传递。此外,使用post_save,如果您不小心,您将陷入无限循环。最好使用pre_save。

@receiver(pre_save, sender=Message)
def my_handler(sender, **kwargs):
    instance = kwargs['instance']
    if not instance.charge:
        instance.charge = instance.length()
        # No need to save, as we're slipping the value in 
        # before we hit the database.

【讨论】:

  • 好吧,这是有道理的,我也试过了 (sender, instance=None, **kwargs): 那行得通。
猜你喜欢
  • 2018-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-04
  • 2020-07-03
  • 1970-01-01
相关资源
最近更新 更多