问题标签 [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.
python - Django 信号与覆盖保存方法
我很难解决这个问题。现在我有一些看起来像这样的模型:
一个评论有几个“分数”,overall_score 是分数的平均值。保存评论或分数时,我需要重新计算总分平均值。现在我正在使用覆盖的保存方法。使用 Django 的信号调度器有什么好处吗?
python - m2m 字段上的 post_save 信号
我有一个非常通用的文章模型,与标签模型有 m2m 关系。我想记录每个标签的使用情况,我认为最好的方法是对标签模型上的计数字段进行非规范化,并在每次保存文章时更新它。我怎样才能做到这一点,或者也许有更好的方法?
django - 拥有更新字段或 COUNT 查询是否“更好”?
在我正在开发的 Django 应用程序中,我进行了以下操作:
我计划经常访问avg_child_rating 。如果我执行以下操作会优化:
现在的不同之处在于,每次创建/评级/删除孩子时,都会更新 Parent 对象。我知道创建/评级会经常进行。
什么更贵?
python - 保存一次后如何将模型实例设为只读?
我正在编写的 Django 项目中的一个功能是发送时事通讯。我有一个模型Newsletter
和一个函数,send_newsletter
我已经注册了它来收听Newsletter
's 的post_save
信号。当通过管理界面保存时事通讯对象时,send_newsletter
检查是否created
为 True,如果是,则它实际发送邮件。
但是,出于显而易见的原因,编辑已经发送的时事通讯没有多大意义。有没有办法Newsletter
在保存对象后将其设为只读?
编辑:
我知道我可以重写save
对象的方法来引发错误,或者如果对象存在则什么都不做。但是,我没有看到这样做的意义。至于前者,我不知道在哪里捕获该错误以及如何向用户传达对象未保存的事实。至于后者,给用户错误的反馈(管理界面说保存成功)似乎不是一件好事。
我真正想要的是允许用户使用 Admin 界面编写时事通讯并发送,然后浏览已经发送的时事通讯。我希望管理界面在不可编辑的输入框中显示已发送时事通讯的数据,而无需“保存”按钮。或者,我希望“保存”按钮处于非活动状态。
python - Django - 我如何_not_调度信号?
我为我的模型编写了一些智能通用计数器和管理器(以避免select count
查询等)。因此,我对 post_save 进行了一些繁重的逻辑。
我想防止在不需要时处理信号。我想完美的界面应该是:
我怎样才能做到这一点?
更新
如果有人感兴趣,请提供有关我在做什么的更多信息:
- 通用计数器存储在单独的表中
- 每次 Django 对对象列表进行分页时,它都会调用我的自定义管理器的重写 count() 方法,该方法基本上检索适当对象类的静态计数器值。
- 信号触发计数器更新的逻辑,这有点复杂,因为它检查相关模型的许多方面(即它必须基于嵌套类别树生成可见性属性)。我不能把这个逻辑放在 Model.save() 中,因为一个计数器依赖于许多不同的模型。我希望将这种逻辑整合在一起,而不是碎片散布。
- 我正在对我的一些模型进行非规范化,因此我跨表重写(复制)某些值。
- 出于测试目的,我运行我的小命令扩展 - Dilla来填充随机数据。
- 我注意到触发了不需要的信号,因此我希望它们有条件地运行。
希望它足够清楚。请原谅我的语言错误。
python - 为什么信号不简单地称为事件?
据我所知,在 Python 和 Django 中,信号只是委托事件。有什么可以在功能上将它们与 C#、Java、ActionScript 等中的典型事件概念区分开来吗?
python - Django Model.object.get pre_save 函数怪异
我制作了一个连接到模型“pre_save”信号的函数。在函数内部,我试图检查模型实例的 pk 是否已经存在于表中:
模型的第一个实例引发错误。我发现了错误并从标题中生成了一个 slug 字段。在第二种情况下,它不会引发错误。我在两个实例上检查了 instance._get_pk_val() 的值,它们是相同的:无
所以:
这是我玩python和django的第三天。所以我很抱歉,如果它是我没有看到的新事物。
编辑:
该模型:
功能基础:
@S.Lot 告诉我在评论中覆盖 save() 方法。我得试试。我仍然想知道为什么对 model.objects.get() 的第二次调用没有使用此方法引发错误。
编辑 2 谢谢@S.Lot。覆盖保存方法非常有效。还是对信号法很好奇。嗯,很奇怪。
编辑 3 在玩了一会儿之后,我发现使用 instance.objects.get() 而不是 sender.objects.get() 有效:
需要是:
一个错误?出于某种原因,我认为 sender.objects.get() 将与 Test.objects.get() 相同。
django - Django模型覆盖保存/使用信号/或使用模型形式?
我意识到以前有人问过这个问题,但是我找不到真正涉及我正在尝试做的事情的问题。我认为这很简单,但我想知道普通民众认为这里最好的形式是什么。
假设我们有以下内容:
模型.py
保存功能中的评论几乎总结了我的问题: - 我们如何确保给用户的相关 TestClass 不超过 5 个 - 如果已经有 5 个,我们如何优雅地退出保存(不保存) -我们如何将此报告给用户?- 我们在哪里验证 testfield 对象以确保它只有 [az]?我可以只导入 re 并在这里做吗?我应该吗?
最好把这一切都扔在这里吗?我应该触发 pre_save 信号吗?还是我应该只使用带有验证的 ModelForm?
asp.net-mvc - Linq to Sql中的信号?
有谁知道使用 LINQ to SQL做类似于Django 的事情的方法?signals
我正在尝试记录何时插入新行以及何时更新某些列,所以我真的只想pre_save
发出post_save
信号。
我可以通过使用像OnFooIDChanging()
和OnFooIDChanged()
(其中FooID
是主键)定义的部分来处理某些模型,但这不适用于主键不是标识或由代码设置的模型。
对于那些,我可能会使用OnValidate()
,但那只是pre_save
,并且它使处理数据库变得困难,因为OnValidate()
被调用 from DBContext.SubmitChanges()
,这当然不允许SubmitChanges()
从内部调用第二个,post_save
就我而言基本上是不可能的可以看到。
django - 有没有办法列出 Django 信号?
有没有办法查看 Django 中设置了哪些信号?