问题标签 [django-signals]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2463 浏览

python - 为什么 Django 的信号处理默认使用弱引用进行回调?

Django 文档在这个问题上这样说:

另请注意,Django 默认将信号处理程序存储为弱引用,因此如果您的处理程序是本地函数,它可能会被垃圾回收。为防止这种情况,请在调用信号的 connect() 时传递 weak=False。

我无法找到任何理由说明为什么这是默认设置,而且我不明白为什么你会想要一个你明确注册的信号隐式消失。那么这里弱引用的用例是什么?为什么它是默认值?

我意识到在 99% 的情况下这两种方式都可能无关紧要,但显然这里有些东西我不明白,我想知道是否有任何潜伏的“陷阱”可能有一天会咬我。

0 投票
1 回答
240 浏览

python - 信号在 django1.1 测试服务器中注册了不止一次

我在我的 models.py 文件中定义了一个信号处理函数。在该文件的底部,我按照http://docs.djangoproject.com/en/dev/topics/signals/signals.post_save.connect(myhandler, sender=myclass)文档中的建议使用。

但是,当我运行测试服务器时,简单的打印语句调试显示 models.py 文件被导入了两次(据我所知),这导致我的信号处理程序被注册了两次。这意味着每个动作都会被处理两次,这显然不是预期的行为。

第一次导入似乎发生在模型检查阶段,第二次导入发生在服务器处理的第一个请求期间需要模型本身时。

我应该在其他地方注册我的信号处理程序吗?这是 1.1 测试服务器中的错误吗?我还缺少其他东西吗?

0 投票
3 回答
4742 浏览

python - 为什么 Django post_save 信号会给我 pre_save 数据?

我试图将“信息”对象连接到许多“客户”(参见下面的代码)

当一个信息对象更新时,我想向每个连接到该信息的客户发送电子邮件。

但是,当我记录信号接收到的 sold_to 字段时,我总是会在保存之前得到数据的样子。

我猜这是因为它的 ManyToManyField 和数据存储在单独的表中,但是在所有关系都更新后不应该调用 post_save 信号吗?

有人有解决方案的建议吗?

编辑:#django 中的 apollo13 提醒我这一点:“相关项目(被保存到多对多关系中的东西)没有作为模型保存方法的一部分保存,正如你所发现的那样。” - http://groups.google.com/group/django-users/msg/2b734c153537f970

但自从它从 2006 年 7 月 9 日开始,我真的很希望有一个解决方案。

0 投票
1 回答
611 浏览

django - 将 django.dispatch.dispatcher 从 Django 0.96 迁移到 1.0.2

如何在 Django 1.0 中执行以下(Django 0.96)调度程序挂钩?

顺便说一句,这段代码来自谷歌关于在 GAE 上使用 Django 的文章。不幸的是,Django 中的调度代码在 0.96 和 1.0 之间被重写,Google 的示例不适用于 Django 1.0。

当然,Django 人员提供了有关如何准确执行此迁移的有用指南,但我目前还不够热衷于弄清楚。:o)

谢谢阅读。

布赖恩

0 投票
1 回答
37447 浏览

django - 引发 404 并继续 URL 链

我有一个这样的 URL 模式:

filtered-listtitle匹配相同的东西。

如果有与 in 匹配的可用列表tagfiltered-list我想list_titles启动。但是,如果没有匹配的tag,我想将其返回到 URL 处理器,以便show_title触发。

如果没有匹配的标题,我会在那里提出适当的 404。

我知道我可以从视图内部执行此操作......但是将过程硬连接到视图中有点臭。我希望 URL 顺序来决定首先选择什么以及它交给什么。

0 投票
2 回答
214 浏览

django - 保存对象后使用相关对象?

我有一种情况,我想在每次保存、更新或删除模型实例时卸载一个 xml 片段(一个原子事件)。片段需要包含有关相关对象的信息。

在保存对象后,我找不到让我使用来自相关对象的信息的事件。该post_save信号似乎在相关对象被保存之前被触发。

目前我正在重写ModelAdmin save_model 方法以输出一个完整的原子条目,其中包含有关实例及其相关对象的详细信息。但这仅在通过管理界面管理实例而不是在以编程方式更新实例时才有效。

有谁设法创造了类似于post_save_of_everything信号的东西?

0 投票
2 回答
5730 浏览

django - Django 信号发出一次,收到两次——为什么?

我正在使用 Django 信号,但它们似乎被接收了两次,即使发出一次。这是我正在使用的代码(这是一个将 Uploadify 与 Django 一起使用的简单包装器)...

(我刚刚注意到我的信号拼写错误)

我敢肯定你注意到了那里的打印语句。在控制台上,这就是它所显示的内容:

(同样奇怪的是为什么 Django 会在信号触发后报告页面 POST?)

0 投票
2 回答
1381 浏览

python - Django:如何在管理员中显示之前修改文本字段

我有一个带有文本字段的 Django 模型。我想在将文本字段的内容呈现给 Django Admin 中的用户之前对其进行修改。

我期待看到与post_load等效的信号,但它似乎不存在。

更具体:

我有一个接受用户输入的文本字段。在此文本字段中有一个阅读更多分隔符。分隔符之前的文本将进入 introtext 字段,之后的所有内容都将进入全文字段。

同时,我只想在用户编辑文章时显示 1 个文本字段。

我的计划是 on_load 从 introtext 和 fulltext 字段中读取数据并将它们组合成全文 textarea。在 pre_save 上,我将使用 read more 分隔符拆分文本,并将 intro 存储在 introtext 中,将其余部分存储在全文中。

因此,在显示表单之前,我需要填充全文字段

我需要能够对现有项目执行此操作。

0 投票
1 回答
4092 浏览

django - Django:queryset.update 上的信号

如果您使用该queryset.delete()方法,Django 正在发送 pre/post_delete 信号,但它不应该也发送 pre/post_save onqueryset.update()吗?

0 投票
6 回答
14479 浏览

django - 保存后不立即更新多对多关系的问题

当我保存模型(通过管理员)并尝试在附加到post_save信号的函数中或save_model关联的AdminModel. 我试图通过使用带有 id 的 get 函数在这些函数中重新加载对象。但它仍然具有旧值。

这是交易问题吗?事务结束时是否有信号抛出?

谢谢,