
sender通过指定其完整的应用标签来连接接收器时,可以懒惰地引用模型信号模型。例如,应用程序中Answer定义的 模型polls可以引用为‘polls.Answer‘。在处理循环导入依赖项和可交换模型时,这种引用非常方便。pre_init__init__()方法的开头发送。senderargs__init__():kwargs__init__():| 争论 | 值 |
sender |
Poll (班级本身) |
args |
[](一个空列表,因为没有传递给位置参数__init__()。) |
kwargs |
{‘question‘: "What‘s up?", ‘pub_date‘: datetime.now()} |
post_init__init__()方法在方法完成时发送。senderinstancesenderinstancerawTrue如果模型完全按照提供的方式保存(即加载夹具时)。不应该查询/修改数据库中的其他记录,因为数据库可能尚未处于一致状态。usingupdate_fieldsModel.save(),或者None如果update_fields未传递给它save()。senderinstancecreatedTrue如果创建了新记录。rawTrue如果模型完全按照提供的方式保存(即加载夹具时)。不应该查询/修改数据库中的其他记录,因为数据库可能尚未处于一致状态。usingupdate_fieldsModel.save(),或者None如果update_fields未传递给它save()。pre_deletesenderinstanceusingpre_deletesenderinstanceusingm2m_changedManyToManyField在模型实例上更改a 时发送。严格来说,这不是一个模型信号,因为它是由它发送的 ManyToManyField,但由于它补充了 pre_save/ post_save和pre_delete/ post_delete当跟踪模型的变化时,它包含在这里。senderManyToManyField。定义多对多字段时,将自动创建此类; 您可以使用through多对多字段中的属性访问它 。instancesender的类的实例,也可以ManyToManyField是与之相关的类的 实例。action"pre_add""post_add""pre_remove""post_remove""pre_clear""post_clear"reversemodelpk_setpre_add,post_add,pre_remove和post_remove的动作,这是一组已被添加到或从关系移除主键值。pre_clear和post_clear行动,这是None。usingPizza可以有多个Topping对象,则建模如下:
class Topping(models.Model): # ... pass class Pizza(models.Model): # ... toppings = models.ManyToManyField(Topping) 如果我们连接这样的处理程序: from django.db.models.signals import m2m_changed def toppings_changed(sender, **kwargs): # Do something pass m2m_changed.connect(toppings_changed, sender=Pizza.toppings.through)
| 争论 | 值 |
sender |
Pizza.toppings.through (中级m2m级) |
instance |
p(Pizza正在修改的实例) |
action |
"pre_add"(后跟一个单独的信号"post_add") |
reverse |
False(Pizza包含 ManyToManyField,所以这个调用修改了前向关系) |
model |
Topping(添加到的对象的类 Pizza) |
pk_set |
{t.id}(因为只添加到关系中)Topping t |
using |
"default" (因为默认路由器在这里发送写入) |
| 争论 | 值 |
sender |
Pizza.toppings.through (中级m2m级) |
instance |
t(Topping正在修改的实例) |
action |
"pre_remove"(后跟一个单独的信号"post_remove") |
reverse |
True(Pizza包含 ManyToManyField,所以这个调用修改了反向关系) |
model |
Pizza(从中删除的对象的类 Topping) |
pk_set |
{p.id}(因为只从关系中删除)Pizza p |
using |
"default" (因为默认路由器在这里发送写入) |
class_preparedAppConfig.ready()在app注册表完全填充后运行,因此无法在该方法中连接接收器。一种可能性是连接它们AppConfig.__init__(),注意不要导入模型或触发对app注册表的调用。senderpre_migratesenderAppConfig要迁移/同步的应用程序的实例。app_configsender。verbosityinteractiveinteractive是True,则提示用户在命令行上输入内容是安全的。如果interactive是False,侦听此信号的功能不应尝试提示任何内容。usingplanTrue)或已应用(False)。appsApps在迁移运行之前包含项目状态的实例。应该使用它来代替全局 apps注册表来检索要对其执行操作的模型。post_migratesenderAppConfig刚刚安装的应用程序的实例。app_configsender。verbosityinteractiveinteractive是True,则提示用户在命令行上输入内容是安全的。如果interactive是False,侦听此信号的功能不应尝试提示任何内容。usingdefault数据库。planTrue)或已应用(False)。appsApps迁移运行后包含项目状态的实例。应该使用它来代替全局 apps注册表来检索要对其执行操作的模型。
class Topping(models.Model): # ... pass class Pizza(models.Model): # ... toppings = models.ManyToManyField(Topping) 如果我们连接这样的处理程序: from django.db.models.signals import m2m_changed def toppings_changed(sender, **kwargs): # Do something pass m2m_changed.connect(toppings_changed, sender=Pizza.toppings.through)
AppConfig实例作为sender参数,请确保已注册信号 ready()。AppConfig对于使用修改集INSTALLED_APPS(例如,当覆盖设置时)运行的测试,将重新创建s,并且应为每个新AppConfig实例连接此类信号。request_startedsenderdjango.core.handlers.wsgi.WsgiHandler- 处理请求。environenviron提供给请求的字典。got_request_exceptionsenderrequestHttpRequest对象。原文:https://www.cnblogs.com/limengda/p/11257117.html