1

保存する前にモデル データを変更できるようにする必要があったため、pre_save ハンドラーを使用することが最善の選択肢であると考えました。

@receiver(pre_save, weak = False)
def pre_category_save(sender, **kwargs):
    if kwargs['instance'].tags is None:
        kwargs['instance'].tags = kwargs['instance'].__unicode__().replace(' -> ', ', ')

kwargs のインスタンス キーの下で、保存している実際のモデル インスタンスを見つけることを期待していましたが、代わりに LogEntry クラスのオブジェクトを取得しました。これが、関数がこのエラーを返すのに失敗した原因です: 'LogEntry' object has no attribute 'tags' . それで - どうすれば修正できますか?インスタンスに属性タグがあるかどうかを確認することは解決策ではありません。これは、常に logentry オブジェクトのみを取得するためです。最終的には Model.save メソッドをオーバーロードできますが、これは避けたいと思います。

4

1 に答える 1

4

このシグナルによって受信されているモデル クラスを指定していないため、LogEntry を含むすべてのモデルの保存に接続されています。代わりに、次のようにします。

 @receiver(pre_save, sender=MyModel, weak=False)
 ...

ドキュメントを参照してください。

于 2011-11-05T18:31:16.713 に答える