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,
)
...
下面是我写的接收函数。
@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,
)
...