2

さて、私は一般的な質問があります..私は自分のmodels.pyを非常にきれいにしたいです...モデルを宣言する以外に他のものはありません。

これをmodels.pyとして持っているとしましょう

class UserProfile(models.Model:
    user = models.OneToOneField(User, related_name='profile')
    #other stuff

これが私のsignals.pyです

def create_user_profile(sender, instance, created, **kwargs):
    if created:
        profile, created = UserProfile.objects.get_or_create(user=instance)

post_save.connect(create_user_profile, sender=User)

これが私のシグナルファイルであることをアプリケーションに伝えるにはどうすればよいですか?..models.pyでそれらを宣言する必要がありますか?

//ねずみ

4

2 に答える 2

1

ええと-私はそれをする一つの方法が好きでした。同じアプリでreceivers.pyまたはsignals.pyを作成し、シグナル受信メソッドを配置してから、それらすべてをインポートして、models.pyのシグナルに接続します。

または(私がいつも使用している接続信号を定義するためにデコレータを使用したい場合はfe)-models.pyの最後にreceivers.py全体をインポートします。from app.receivers import *

このソリューションで私が気に入らないのは、注意しなければならない循環依存関係で終わることがあるということだけです。

于 2012-08-17T17:58:23.410 に答える
0

どこかにインポートして、signals.py実行され、djangoがシグナルとハンドラーを登録するようにする必要があります。

できれmodels.pyば、シグナルが生成される前にシグナルハンドラーが登録されるように、十分に早く含まれるようにインクルードしてください。

于 2012-08-17T17:59:35.040 に答える