【发布时间】:2011-06-16 14:39:48
【问题描述】:
我想知道是否可以在创建对象时选择性地抑制 Django 信号(例如 post_save 或 post_init),或者,向其发送某些参数。
我拥有的是一个User 对象,它可以在我的代码中以多种不同的方式和位置创建。所以要自动为每个User 分配一个自定义Profile 对象,我使用post_save 信号。但是,在一种特定情况下,我想将额外信息绑定到创建的Profile 对象。将它作为参数传递给post_save 信号会很棒,但看起来不太可能。
另一种选择是手动创建Profile 对象,但我需要在保存User 之后创建,否则Profile 无法绑定到User 实例。但是,保存 User 实例会导致通过信号调用的函数创建另一个 Profile。
我不能只获取刚刚创建的Profile 对象,因为这会导致'Profile' object is unsubscriptable 错误。有什么建议吗?
更新:
以下是可能情况的示例:
def createUserProfile(sender, instance, created, **kwargs):
if created:
profile, created = Profile.objects.get_or_create(user=instance)
if extra_param:
profile.extra_param = extra_param
profile.save()
post_save.connect(createUserProfile, sender=User)
def signup(request):
...
extra_param = 'param'
user.save()
如何将signup 方法中的变量extra_param 获取到createUserProfile 方法,并将其作为Profile 对象的一部分存储在其中?
【问题讨论】:
标签: django django-signals