使用Django 1.2,我正在运行 django-registration 应用程序,并在注册创建用户后创建用户配置文件对象 - 使用来自其他一些问题的代码:
# models.py
def create_player_profile(sender, instance, created, **kwargs):
signals.post_save.disconnect(create_player_profile, sender = User) # added.
if created:
print "creating profile."
profile, created = PlayerProfile.objects.get_or_create(user = instance)
print "profile %s created = %s" % (str(profile), str(created))
else:
print "problems creating profile."
signals.post_save.connect(create_player_profile, sender = User)
它工作正常:)唯一的问题是,我得到两组输出,表明代码正在运行两次。我怀疑由于某种原因,信号会被发送两次。
我的第一个想法是文件正在导入两次,设置两个相同的信号。这让我想知道是否 django-registration 自动做某事?或者其他我还不了解Django的东西。 :)
那为什么代码会运行两次?是否发送了两个信号,如果是,为什么?
更新刚刚注意到this Answer解释了如何避免重复信号。它有点工作:)我的输出来自:
创建个人资料 创建个人资料 创建档案的问题
创建个人资料的问题
为:
创建个人资料 创建个人资料的问题
我不知道这是否意味着我的代码最初运行四次?而下降到只有两次?我很困惑。 :)
更新2 - 添加了 signals.disconnect 行。我想删除信号会阻止函数执行两次。唉,我错了 - create-player-profile 仍然运行两次......我不知道为什么会这样,如果信号被立即删除。
答案 0 :(得分:1)
更新:删除了有关AUTH_PROFILE_MODULE
那为什么代码会运行两次?是 发送两个信号,如果是, 为什么呢?
我想问题不是信号被调用两次,而是你的User.save()
方法在某处被调用两次(因此也是信号)。也许你应该先检查一下。
答案 1 :(得分:0)
如果模块的缩进不正确,如果你可能在create_player_profile函数中混合了空格和制表符缩进,也可能发生这种情况。