django 信号中的参数序列

Sequence of arguments in django signals


下面是我写的接收函数。
@receiver(post_save,sender=User)
def create_profile(sender, instance, created, **kwargs):   
    if created:
        Profile.objects.create(user=instance)

这个函数中的参数是否有特定的顺序?
我可以更改这些参数的位置吗?
例如 - def create_profile(sender, created, instance, **kwargs)

来自 Django documentation,参数是:

  • sender : 模型 class.
  • instance : 正在保存的实际实例。
  • created :一个布尔值;如果创建了新记录,则为真。
  • raw :一个布尔值;如果模型完全按照呈现的方式保存(即加载夹具时),则为真。不应 query/modify 数据库中的其他记录,因为数据库可能尚未处于一致状态。
  • using : 正在使用的数据库别名。
  • update_fields :传递给 Model.save() 的要更新的字段集,或者 None 如果 update_fields 没有传递给 save()

每个参数都作为关键字参数发送,因此您可以按任何顺序使用它们,只要给它们一个默认值即可。

例如:

@receiver(post_save,sender=User)
def create_profile(raw=True, sender=None, created=False, **kwargs):
    ...

您可以通过查看 where post_save 发送来了解参数是如何提供的:

...

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

...