我想知道是否可以在对象创建时选择性地抑制 Django 信号(例如post_save
或post_init
),或者,向其发送某些参数。
我拥有的是一个User
对象,它可以在我的代码中以多种不同的方式和位置创建。因此,为了自动Profile
为每个对象分配一个自定义对象User
,我使用了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()
如何将方法中的变量extra_param
传递signup
给 createUserProfile 方法,并将其作为Profile
对象的一部分存储在哪里?