在我计划最终发布的pythondjango模型的上下文中,我有一个有趣的设计决策。你知道吗
这些类对ApprovalRequest进行建模,ApprovalRequest表示一个用户请求的问题/请求,该问题/请求可以由另一个用户组投票,也可以上诉,然后由“更高级别”的组再次投票,等等
我有以下模型树:
我的第一个问题是关于“动作类型”。因为我的目的是让它成为一个任何人都可以使用的可重用模块,所以我希望它在事件发生时发出信号。然而,这个模型适用于许多事情-适度,用户推广,用户禁止上诉决定等,因此,需要某种类型的“类型”参数。在OOP设计中解决这个问题的一个经典方法是允许创建子类并进行自定义操作,这很好,但是Django(尤其是)没有简单的方法从DB中获取“正确”的子类。例如,使用内置模型继承,每个子级的数据将有一个主ApprovalRequest db表和N个附加db表。你知道吗
我最初的想法是创建一个子类“registry”,它将为我的类型字段分配一个唯一的id,这样当我需要执行特定于类型的操作时,我就可以可靠地向下转换到已注册的类型。这将迫使子类为它们的子类选择一个(项目范围的)id,并且通常看起来不美观。你知道吗
我的第二个问题与“可以投票的用户”有关。我希望大多数ApprovalRequest对象实际上是由代码创建的,而不是通过Django管理员创建的。假设发生以下操作:
问题是,或多或少,如何以安全的方式存储这个复杂的查询集?我可以将这项工作委托给基于类型的子类,但这似乎不够优雅。我可以试试storing the queryset in the database somehow,但这似乎有点不太对劲。选择的标准路线是什么?你知道吗
谢谢你对这些问题的建议。你知道吗
Django中已经有了为模型分配唯一id的机制:https://docs.djangoproject.com/en/dev/ref/contrib/contenttypes/
相关问题 更多 >
编程相关推荐