1

在我的模型中,我有一个Event类、一个Volunteer类和一个Session类。Session 类具有 Event 和 Volunteer 的外键字段,并且是两者以及日期和时间的唯一耦合。总的来说,我认为志愿者和活动在技术上具有多对多关系。

使用预打包的 Django 管理员,我分别用自己的admin.ModelAdmin类编辑志愿者和活动。会话在 Events 中内联编辑ModelAdmin

当我使用志愿者在管理界面中向事件添加新会话时,我需要自动更新志愿者的hours字段,以反映新添加的会话持续了多少小时(加上所有过去的会话)。目前,我在模型中只有一个calculate_hours函数,Volunteer每次调用它时都会遍历所有会话并找到小时的总和。我尝试在 Session 中使用自定义保存函数调用它,但在事件保存函数之后似乎永远不会调用它。我会在 Event 中尝试,但我无法确定哪些志愿者需要重新计算他​​们的工作时间。如果我手动转到志愿者管理页面,编辑然后保存志愿者,小时字段会更新,但这是非常不可接受的。

我看到在管理站点上保存内联对象时,有很多关于 Django 问题的问题,特别是对于 ManyToMany 字段。在阅读了许多这些问题之后,我不确定他们所说的是否适用于我的情况——也许我需要在某处接收信号,或者在特殊的地方包含自定义保存,或者save_model在我的admin.ModelAdmin课堂上打电话......我只是不知道。解决此问题的最佳方法是什么?

代码可以在这里找到:Models.py , Admin.py

4

1 回答 1

1

首先,您所描述的关系是所谓的“多对多”“通过”(您可以在此处的文档中阅读它)。

其次,我不明白为什么你需要“小时”作为一个领域。一个功能还不够吗?为什么首先将其保存在数据库中?您可以在每次需要时调用它。

最后,在我看来,你做了很多我不明白的额外工作——你为什么需要志愿者时间布尔字段?如果您将志愿者与活动联系起来,还不足以知道他在那里吗?“counts_towards_volunteer_time”的目的是什么?我可能在这里遗漏了一些逻辑,但其中很多似乎是浪费的。

于 2013-08-11T10:34:13.450 回答