假设我有这个为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中声明它们吗?
//小鼠
答案 0 :(得分:1)
嗯 - 我看到了一种我喜欢的方式。在同一个应用程序中创建receivers.py或signals.py,然后输入信号接收方法,然后导入所有这些方法并连接到models.py中的信号。
甚至(如果你喜欢使用装饰器来定义连接信号,我总是使用它) - 在models.py的末尾导入整个receivers.py:from app.receivers import *
在这个解决方案中,我唯一不喜欢的是它有时以你必须关心的循环依赖结束。
答案 1 :(得分:0)
你必须在某处导入signals.py
以便它被执行并且django会注册信号和处理程序。
优选地,将其包括在models.py
中,以便足够早地包括它,以便在生成任何信号之前注册信号处理程序。