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

好吧 - 我看到了我喜欢的一种方法。在同一个应用程序中创建receives.py 或signals.py,并放置您的信号接收方法,然后将它们全部导入并连接到models.py 中的信号。

甚至(如果你喜欢使用装饰器来定义连接的信号,我总是使用它) - 在 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 回答