如何在django中创建层次结构组织(树状)?

时间:2014-03-05 03:16:01

标签: python django authentication django-permissions

我必须在django中创建一个组织结构(树状)。目前,我正在使用具有parent_id的auth_user的一对一映射表,但是当组织级别更高时,我必须在同一个表上触发多个查询以获取顶级节点的子节点。

另外,我需要在几个视图的基础上允许权限。例如。用户可以拥有在特定表中查看自己的条目以及由他的团队添加的条目的权限。 对于权限,我目前正在获取所有用户的列表,并检查其中一个用户是否与添加该条目的用户相同并检查相同的权限(在视图之前的装饰器中)。我认为如果我可以覆盖has_perm方法来做同样的事情会更好。

有没有更好的方法来做这个或插件做类似的事情?

1 个答案:

答案 0 :(得分:0)

您可以使用以下几种已知方法之一来解决组织结构父/祖先查询问题(有关详细信息,请参阅,例如this question)。对于特定于Django的问题,有一个名为treebeard的合理活跃项目,它提供了邻接列表,物化路径和嵌套集。

对于权限问题,您必须更详细地指定问题,但如果您使用treebeard则有一种可能性:

def can_view(entry, user):
    return entry.user.get_root() == user.get_root()