你不需要阅读所有这篇文章来帮助我回答这个问题,这篇文章的其余部分只是问题出现的上下文,但一般问题是:
在 Django 中将跨多个模型的业务逻辑放在哪里?
一些可能性:
- 一些观点?(我不这么认为,它必须在管理员和几个视图中工作,DRY)
- 在模型/表单中保存方法?(如何?)
- 模型/表单中的清洁方法?(如何?)
- 拆分逻辑并使用信号?(如何?)
- 其他?
语境:
我有这个模型:
- 部门:参考公司的不同部门(风险、财务、IT、...)
- 员工:可能在一段时间内只属于一个部门,然后转入另一个部门。
- 项目:每个部门可以有多个项目,一个项目属于多个部门。
- Membership:Employee 和 Department ManyToMany 关系之间的中间表,包括 join_date 和 leave_date 等其他字段,重要字段是 fk:Department,fk:Employee
- 历史:Membership 和 Project 之间的中间表,让我知道哪个员工参与了希望项目,当他在某个部门工作时,重要的字段是 fk:Membership,fk:Project。
- CurrentProjects:将部门与他们当前正在进行的项目相关联的表格。
假设我在 Django 管理员中,我去部门 Risk,并且 Risk 目前已分配 Project1 和 Project2。当我添加一个新员工“Jhon Smith”(例如,在部门中使用内联表单)并按下保存按钮时,我希望模型历史记录使用以下信息进行更新:
成员表(仅重要字段): pk 部门员工 join_date leave_date 20 风险 Jhon Smith xxxx xxxx 历史表(仅重要字段): 会员项目 20 项目1 20个项目2
我的意思是当一个新员工被分配到一个新部门时,该部门的所有实际项目都必须分配给历史表中的该成员资格员工部门。
问题是在 Django 中将这个逻辑放在哪里?如您所见,此逻辑涉及多个模型,一些可能性是:
- 在某些方面(我不这么认为,它必须在管理界面和其他地方工作)
- 在 Membership、Department 或 Employee 模型/表单的 clean 方法中?
- 在 Membership、Department 或 Employee 模型/表单的保存方法中?
- 我必须拆分逻辑并使用信号之类的东西?(一些例子?)
- 其他的?
- 我把一切都复杂化了?=)
注意事项:如果代码可以在过程中的任何时候生成 valueerror 并且用户/管理员能够以无限制的形式看到这个错误,那就太好了。