如何解决Django 信号中的参数序列
下面是我写的接收器函数。
@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,)
...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。