问题标签 [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 多对多信号?
假设我有这样的模型
如果事件添加/删除一些用户,您会如何建议更新 users_count 值?
python - 在 Django 中的许多模型中添加常见的 date_added、date_modified 的最佳方法
我正在将 date_added 和 date_modified 字段添加到我当前项目中的一堆常见模型中。我正在继承 models.Model 并添加适当的字段,但我想添加自动保存行为(即:每次有人调用 MyModel.save() 时,date_modified 字段都会更新。我看到两种方法:覆盖 save() 方法或在抽象基类中添加 pre_save 信号处理程序。
或者
我是 Django 和 Python 的新手,想知道哪种方法更“django”?哪个更有效率?这是“正确”的方法吗?
django - Django:信号到底有什么用?
我很难理解信号是如何在我的应用程序中工作的(以及它们是如何工作的)。这是我认为它们将适用的三个领域(以我目前的知识):
- 将 XML 发送到远程服务器以进行报告(事务完成后)。
- 用户上传后,重新调整图像大小并将缩略图上传到 S3。
- 用户从其帐户中删除图像对象后,从 S3 中删除旧图像。
我完全不在基地吗(我觉得我可能是)。我得到信号和多线程混淆了吗?如果是这样,他们会在应用程序中进行比较吗?它们只是为了脱钩吗?此外,确保您尽早实例化它们并且不使用本地函数(因为它们会被垃圾收集)有什么关系?有人可以详细说明吗?我应该把它们都放在请求中间件中,这样我就不用担心了吗?
django - 断开模型的信号并在 django 中重新连接
我需要使用模型进行保存,但我需要在保存之前断开一些信号接收器。
我是说,
我有一个模型:
在代码的另一个地方我需要类似的东西:
因为我需要在这种情况下保存模型而不执行函数 pre_save_model。
python - 通过模型方法上的装饰器发送 Django 信号?
我正在尝试做类似这些建议的信号装饰器的事情。除了有一个将装饰方法连接到信号的装饰器(将信号的发送者作为装饰器的参数)之外,我还想在类方法上使用装饰器。
我想像这样使用装饰器:
装饰器是:
我这样做时得到的错误是:
我猜问题是@classmethod
返回一个不可调用的类方法对象。我不太了解幕后classmethod
的工作原理,但我从这个参考页面推测类方法对象在从类访问之前不会被转换为可调用对象,例如ModelA.observe_model_b_saved
. 有什么方法可以(1)将我的方法定义为模型上的类或实例方法,以及(2)直接在方法定义上使用装饰器将其连接到信号?谢谢!
django - Django 模型、信号和电子邮件发送延迟
我在我的模型中添加了一个信号,一旦模型被保存(通过models.signals.post_save.connect
信号和send_mail
电子邮件发送),它就会向一些电子邮件地址发送电子邮件。这个想法仍然给用户带来了延迟,当他们将模型保存在站点上时,他们必须等到所有这些电子邮件都发送完毕,然后才收到服务器的响应。
在尝试信号之前,我曾尝试包装我的模型的保存方法,并且在super(Foo, self).save(*args, **kwargs)
我发送电子邮件之后。这种延迟体验也发生在这种方法上。
我只是希望我的电子邮件发送操作在后台完成,而不会向现场用户显示延迟。
如何解决?
django - 覆盖 Django 的级联删除行为的选项有哪些?
Django 模型通常可以很好地处理 ON DELETE CASCADE 行为(以一种适用于本机不支持它的数据库的方式。)
但是,我正在努力发现在不合适的情况下覆盖此行为的最佳方法是什么,例如在以下情况下:
ON DELETE RESTRICT(即如果对象有子记录,则防止删除该对象)
ON DELETE SET NULL(即不删除子记录,而是将其父键设置为 NULL 以破坏关系)
删除记录时更新其他相关数据(例如删除上传的图像文件)
以下是我所知道的实现这些目标的潜在方法:
覆盖模型的
delete()
方法。虽然这种方法有效,但当通过QuerySet
. 此外,每个模型都delete()
必须被覆盖以确保 Django 的代码永远不会被调用并且super()
不能被调用,因为它可能使用 aQuerySet
来删除子对象。使用信号。这似乎是理想的,因为它们在直接删除模型或通过 QuerySet 删除时被调用。但是,无法阻止删除子对象,因此无法实现 ON CASCADE RESTRICT 或 SET NULL。
使用能够正确处理此问题的数据库引擎(在这种情况下 Django 会做什么?)
等到 Django 支持它(并在此之前与错误一起生活......)
似乎第一个选项是唯一可行的选项,但它很丑陋,会把婴儿和洗澡水一起扔出去,并且在添加新模型/关系时可能会丢失一些东西。
我错过了什么吗?有什么建议吗?
django - Django“comment_was_flagged”信号
这是我第一次使用 django 信号,我想挂钩评论应用程序提供的“comment_was_flagged”信号,以便在标记评论时通知我。
这是我的代码,但它似乎不起作用,我错过了什么吗?
(我现在只是在测试电子邮件,但我已经确保电子邮件可以正确发送。)
谢谢!
django - 如何将 Django 信号与抽象模型一起使用?
我有一个保留磁盘缓存的抽象模型。当我删除模型时,我需要它来删除缓存。我希望这也适用于每个派生模型。
如果我连接指定抽象模型的信号,这不会传播到派生模型:
如果我尝试在init中连接信号,我可以在其中获取派生类名称,它可以工作,但我担心它会尝试清除缓存的次数与我初始化派生模型的次数一样多,而不仅仅是一次.
我应该在哪里连接信号?