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,)

...