您不需要阅读所有这篇文章以帮助我回答问题,本文的其余部分仅仅是问题出现的上下文,但一般问题是:何处放置商业逻辑,跨越Django中的多个模型
在哪里把商业逻辑,跨越多个模型在Django?
一些posibilites:
- 一些视图? (我不这么认为,它必须在管理和若干意见的工作,DRY)
- 模型/表格保存方法是什么?(如何?)
- 清洁methos模型/表格?(如何?)
- 拆分逻辑和使用信号?(如何?)
- 其他?
语境:
我有这个型号:
- 部:在公司引用不同的部门(风险,金融,IT,...)
- 员工:五月一段时间只属于一个部门,然后更换为其他部门。
- 项目:每个部门可以有多个项目,一个项目属于多个部门。
- 成员:员工和部门多对多的关系,其中包括其他领域,如join_date和leave_date之间的中间表,重要的领域是FK:部门,FK:员工
- 历史:成员和项目之间的中间表,让我知道哪个员工参与了他在某个部门工作的愿望项目,重要的领域是fk:会员,fk:项目。
- CurrentProjects:当前将部门与其正在处理的项目相关联的表。
supose我在Django管理员,我去部门风险,风险目前Proyect1和Project2签署。当我添加一个新员工“JHON史密斯”(例如,使用系内联形式),然后按保存按钮,我想要的模型历史被用该信息更新:
Membership table (only important fields): pk Department Employee join_date leave_date 20 Risk Jhon Smith xxxx xxxx History Table (only important fields): Membership Project 20 Project1 20 project2
我的意思是,当一个新的员工被分配到一个新的部门,该部门的所有实际项目必须被分配到表历史记录中的该成员资格员工部门。
问题是在Django中放置这个逻辑的地方?你可以看到这个逻辑涉及倍数的机型,有些posibilities是:
- 在一些视图(我不这么认为,它必须在管理interfase和在其他地方工作)
- 在的清洁方法会员,部门或员工模型/表单?
- 在会员,部门或员工模型/表单的保存方法中?
- 我必须拆分逻辑并使用类似信号的东西吗? (一些例子?)
- 其他?
- 我过了复杂的永恒? =)
注意事项:如果代码可能在进程中的任意位置生成valueerror并且用户/管理员能够以无界形式查看此错误,那将会很好。
谢谢
您是否探索过信号? – jdi 2012-07-07 21:37:17
@jdi我现在正在审查这个主题,但是你对如何在这种情况下使用它们有一些见解吗? – javier 2012-07-07 21:52:53
看到我的答案。我谈论这个。 – jdi 2012-07-07 22:07:31