post_save错误消息'没有属性

时间:2013-03-26 18:52:03

标签: django django-signals

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

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

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

然而,这会给出错误消息'没有属性'费用',但消息中确实存在费用!

1 个答案:

答案 0 :(得分:2)

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.