当前位置: 首页 > 面试题库 >

Django信号与覆盖保存方法

章学义
2023-03-14
问题内容

我无法解决这个问题。现在我有一些看起来像这样的模型:

 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()

一个Review是有几个“分数”,总体分数是分数的平均值。保存评论或分数后,我需要重新计算total_score平均值。现在,我正在使用重写的保存方法。使用Django的信号分配器会有好处吗?


问题答案:

在需要进行更改的情况下,保存/删除信号通常是有利的,这些更改并非完全针对所讨论的模型,或者可以应用于具有共同点的模型,或者可以配置为跨模型使用。

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

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

例如,使用django-mptt,我使用pre_save信号来管理一组字段,这些字段描述了将要创建或更新的模型的树形结构,并且使用了pre_delete信号来删除要删除的对象及其整个结构的树形结构细节。子对象树,然后删除它们。由于使用的信号,用户不必添加或修改savedelete对他们的模型方法对他们有这种管理做了,他们只需要让Django的MPTT知道他们想要它管理哪些车型。



 类似资料:
  • 问题内容: 在保存模型之前,我需要重新调整图片大小。但是,如何检查是否添加了新图片或仅更新了说明,以便每次保存模型时都可以跳过重新缩放? 我只想在加载新图像或更新图像时重新缩放,而在更新说明时不想要。 问题答案: 一些想法: 不确定是否可以在所有伪自动django工具中正常运行(例如:ModelForm,contrib.admin等)。

  • 问题内容: 保存模型之前,我需要重新调整图片大小。但是,如何检查是否添加了新图片或仅更新了说明,以便每次保存模型时都可以跳过重新缩放? 我只想在加载新图像或更新图像时重新缩放,而在描述更新时不想要。 问题答案: 一些想法: 不知道它是否可以在所有伪自动django工具中正常运行(例如:ModelForm,contrib.admin等)。

  • 问题内容: 在保存模型之前,我需要重新调整图片大小。但是,如何检查是否添加了新图片或仅更新了说明,以便每次保存模型时都可以跳过重新缩放? 我只想在加载新图像或更新图像时重新缩放,而在更新说明时不想要。 问题答案: 一些想法: 不确定是否可以在所有伪自动django工具中正常运行(例如:ModelForm,contrib.admin等)。

  • 问题内容: 我正在考虑一个项目的春季数据。是否可以覆盖默认生成的保存方法?如果是的话,怎么办? 问题答案: 没有使它很好地工作,所以我将所需的逻辑放入服务类中,并保持存储库保存方法不变。

  • 问题内容: 我在数据库中进行了一系列测试和案例。每当测试过时时,它都会被注明过期日期,并且该测试的任何子案例也应注明过期日期。我看到两种方法可以做到这一点: 1)将保存功能修改为结束日期子案例。 2)创建一个接收器,侦听正在保存的测试模型,然后结束其子案例的日期。 有什么理由要使用另一个? 编辑: 我看到这篇博客文章建议每当您检查模型的给定值时都使用save方法。由于我正在检查end_date,也

  • 问题内容: 我无法覆盖ModelForm保存方法。这是我收到的错误: 我的意图是让表单为3个字段提交许多值,然后为这些字段的每个组合创建一个对象,并保存每个对象。朝正确的方向发展将是王牌。 File models.py File forms.py File admin.py 问题答案: 在你里面你必须有论点。如果有任何内容覆盖你的表单,或者想要修改其保存的内容,它将执行操作,修改输出,然后将其保存