0

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

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

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

但是,这给出了错误消息'没有属性'charge',但是消息中确实存在费用!

4

1 回答 1

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.
于 2013-03-26T19:03:22.033 回答