我很难理解这件事.现在我有一些模型看起来像这样:

 def Review(models.Model)
    ...fields...
    overall_score = models.FloatField(blank=True)

def Score(models.Model)
    review = models.ForeignKey(Review)
    question = models.TextField()
    grade = models.IntegerField()

一篇 comments 有几个"分数",综合分数是分数的平均值.保存 comments 或分数时,我需要重新计算总平均分数.现在我正在使用一个重写的save方法.使用Django的信号调度器有什么好处吗?

推荐答案

保存/删除信号通常在需要进行并非完全特定于相关模型的更改的情况下是有利的,或者可以应用于具有某些共同点的模型,或者可以配置为跨模型使用.

被覆盖的save种方法中的一项常见任务是从模型中的某个文本字段自动生成插件.这是一个例子,如果您需要为许多模型实现它,使用pre_save信号将会受益,其中信号处理程序可以采用slug字段的名称和从中生成slug的字段的名称.一旦您有了这样的东西,您设置的任何增强功能也将应用于所有型号-例如,查找您将要为所讨论的型号类型添加的插件,以确保唯一性.

可重用的应用程序通常受益于信号的使用——如果它们提供的功能可以应用于任何模型,它们通常(除非不可避免)不希望用户为了从中受益而直接修改它们的模型.

例如,对于django-mptt,我使用pre_save信号来管理一组字段,这些字段描述了即将创建或更新的模型的树 struct ,而pre_delete信号用于删除被删除对象的树 struct 细节,以及删除之前和删除之前对象的整个子树.由于使用了信号,用户不必在模型上添加或修改savedelete个方法,就可以对其进行管理,他们只需让django mptt知道他们想要管理哪些模型.

Django相关问答推荐

Djnago admin中 Select 字段的自定义查询

如何在Django中获取标记<;输入>;的';值';属性?

在Django中使用Generil.ListView类时,分页不起作用

从Azure Web应用服务器上的cron任务的虚拟环境加载变量

如何从列中捕获数据并将其添加到下拉菜单中,以便表单填充另一个表

Django Form标签和action属性

Django 长时间运行带有线程/处理的异步任务

Django PositiveIntegerField 中的 0 值?

Django 视图 - 首先从调用应用程序的目录加载模板

在 Django 中,您可以向查询集添加方法吗?

Django:访问给定字段的 Select 元组

在 django 中的查询集上运行 explain的简单方法

如何动态检索 Django 模型类?

Python Django:您正在使用 staticfiles 应用程序而没有设置 STATIC_ROOT 设置

保存前向 ModelForm 对象添加数据

Django - 一起为 2 个或更多字段创建唯一的数据库约束

Django 发送邮箱

Django中reverse()和reverse_lazy()的区别

您如何在本地针对 OpenID 进行开发

Django中'related_name'和'related_query_name'属性之间的区别?