Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python(django)通用模块开发-在数据库中存储动态查询集?模型继承_Python_Django_Database Design_Model_Downcast - Fatal编程技术网

Python(django)通用模块开发-在数据库中存储动态查询集?模型继承

Python(django)通用模块开发-在数据库中存储动态查询集?模型继承,python,django,database-design,model,downcast,Python,Django,Database Design,Model,Downcast,在我计划最终发布的Python Django模型的上下文中,我有一个有趣的设计决策 类对ApprovalRequest进行建模,它表示一个用户提出的问题/请求,可以由另一个用户组投票,也可以上诉,然后由“更高级别”组再次投票,等等 我有以下模型树: 批准请求(单一请求) 请求操作的用户 操作类型*/附加数据 批准(可能是多个投票阶段,按时间顺序) 相关批准请求 投票类型(简单多数、需要一票等) 可以投票的用户* ApprovalNote(由一名投票人投下的一票) 相关批款 我的第

在我计划最终发布的Python Django模型的上下文中,我有一个有趣的设计决策

类对ApprovalRequest进行建模,它表示一个用户提出的问题/请求,可以由另一个用户组投票,也可以上诉,然后由“更高级别”组再次投票,等等

我有以下模型树:

  • 批准请求(单一请求)
    • 请求操作的用户
    • 操作类型*/附加数据
  • 批准(可能是多个投票阶段,按时间顺序)
    • 相关批准请求
    • 投票类型(简单多数、需要一票等)
    • 可以投票的用户*
  • ApprovalNote(由一名投票人投下的一票)
    • 相关批款
我的第一个问题是关于“行动类型”。由于我的目的是使它成为任何人都可以使用的可重用模块,所以我希望它在事件发生时发出信号。然而,这个模型适用于许多事情——适度、用户推广、用户禁令上诉决定等。因此,需要某种类型的“类型”参数。在OOP设计中解决这个问题的一个经典方法是允许创建子类并具有自定义操作,这很好,但是Django(特别是)没有简单的方法从DB中获取“正确”的子类。例如,使用内置模型继承,每个子级的数据将有一个主ApprovalRequest db表和N个额外的db表

我最初的想法是创建一个子类“registry”,它将为我的类型字段分配一个唯一的id,这样当我需要执行特定于类型的操作时,我可以可靠地向下转换到已注册的类型。这将迫使子类为其子类选择一个(项目范围的)id,并且通常看起来不雅观

我的第二个问题与“可以投票的用户”有关。我希望这些ApprovalRequest对象中的大多数实际上是由代码创建的,而不是通过Django管理员创建的。假设发生以下操作:

  • 用户请求升级(或某些其他操作)
  • 创建ApprovalRequest对象,指定允许与特定代码相关组(即复杂查询集)匹配的所有用户进行投票
  • 时间流逝,没有对批准请求采取任何行动
  • 现在有十个新用户符合复杂查询集的标准(也就是说,如果现在创建ApprovalRequest,这些用户也将是投票组的一部分)
  • 我希望这些新用户能够投票
  • 问题是,或多或少,我如何以安全的方式存储这个复杂的查询集?我可以根据类型将这项工作委托给子类,但这似乎不雅观。我可以试试,但那似乎有点不太对劲。选择的标准路线是什么


    感谢您对这些问题的建议。

    Django中已经有为模型分配唯一id的机制:

    是的,我知道这一点,但如果可以避免子类化,我考虑不使用它。另外,这不是一个独立于数据库的ID,因为这些ID是根据应用程序加载的顺序生成的。如果我想走这条路,我可能会像Django在get\u model()语法中使用的那样存储字符串'app\u label.model\u name'。谢谢你。