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'がありませんが、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 に答える