【问题标题】:How to create a hierarchical organization (tree like) in django?如何在 django 中创建分层组织(树状)?
【发布时间】:2014-03-05 03:16:00
【问题描述】:

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

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

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

【问题讨论】:

  • 有一些 django exts 比如 django-mptt imom0.github.io/2014/…
  • django-mptt 对我不起作用,因为我在另一个表中有 parent_id,该表与 auth_user 一对一映射但不在 auth_user 中。

标签: python django authentication django-permissions


【解决方案1】:

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

对于权限问题,您必须更详细地说明问题,但如果您使用treebeard,一种可能性是:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-20
    • 2013-12-16
    • 2019-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-19
    相关资源
    最近更新 更多