问题描述
下面是我写的接收器函数。
@receiver(post_save,sender=User)
def create_profile(sender,instance,created,**kwargs):
if created:
Profile.objects.create(user=instance)
这个函数中的参数有特定的顺序吗?
我可以更改这些参数的位置吗?
例如 - def create_profile(sender,**kwargs)
解决方法
从 Django documentation 开始,参数是:
-
sender
:模型类。 -
instance
:正在保存的实际实例。 -
created
: 一个布尔值;如果创建了新记录,则为真。 -
raw
: 一个布尔值;如果模型完全按照显示保存(即加载夹具时),则为真。不应查询/修改数据库中的其他记录,因为数据库可能尚未处于一致状态。 -
using
:正在使用的数据库别名。 -
update_fields
:传递给 Model.save() 的要更新的字段集,如果 update_fields 未传递给 save(),则为 None
每个参数都作为关键字参数发送,因此您可以按任何顺序使用它们,只要给它们一个默认值即可。
例如:
@receiver(post_save,sender=User)
def create_profile(raw=True,sender=None,created=False,**kwargs):
...
您可以通过查看 where post_save is sent 来了解参数是如何提供的:
...
# Signal that the save is complete
if not meta.auto_created:
post_save.send(
sender=origin,instance=self,created=(not updated),update_fields=update_fields,raw=raw,using=using,)
...