0

むしろ、models.pyからsignals.pyを含めると、Djangoとsignalsで古い二重インポートの問題が発生します

シグナル用に「1回だけ実行する」コードを入れる必要はありませんが、どうしても必要な場合はそうするかもしれません。それはちょうどそのような愚かなハックのようです。

ともかく、

私がsignals.pyファイルを持っていて、シグナルの1つがmodels.pyで定義されたオブジェクトの1つに対するものである場合、そのアノテーションを作成するにはどうすればよいですか?

モデルを含めると、Pythonが紛らわしいことに、まだつまずいているように見える、古い「循環参照」の問題が発生します。でも2012年だけです。

get_modelを使って実験しましたが、うまくいかないようです... models.pyファイル内のすべてのモデルのすべての保存に対してシグナルが呼び出されるようになりました。

これが注釈であり、それが今どのように見えるかです:

@receiver(pre_save, sender=get_model('myapp.models','Story'))

私も試しました

@receiver(pre_save, sender=Story)

上記に対応しfrom myapp.models import Storyますが、上記のインポートエラーが発生しました。

私は何をしますか?

4

1 に答える 1

1

このように動かなくなったら、送信者を指定せずに受信者を登録し、関数本体内でモデルのインポートを行います。

@receiver(pre_save)
def handler(sender, instance, created, **kwargs):
    from models import MyModel
    if not isinstance(sender, MyModel):
        return
    do_stuff()
于 2012-09-28T21:05:25.670 に答える