【问题标题】:User-specific model in DjangoDjango中的用户特定模型
【发布时间】:2009-08-20 07:50:34
【问题描述】:

我有一个包含项目的模型,它有许多不同的字段。还有另一种模型使用 m2m 关系为每个用户分配一组此字段。

我想实现,最终,每个用户都可以访问项目模型的一组定义的字段,他只能在视图中看到这些字段,他只能编辑这些字段等。 有没有通用的方法来设置它?

【问题讨论】:

  • 所以,基本上,你有三个实体/模型/表:Item-MapItemUser-User?而且您希望 MapItemUser 充当过滤器,因此每个用户只能看到 Item 的一部分,对吗?您是否希望过滤器是完全动态的,或者是否存在(例如)固定类型的用户(角色)始终可以看到同一组字段?

标签: python django django-models


【解决方案1】:

执行此操作的一种方法是将Item 模型分解为可单独分配给用户的部分。如果您有固定的用户类型(管理员、客户、团队等),他们总是可以看到相同的字段集,那么这些部分将是整个字段组。如果它非常动态,并且您希望能够为每个用户设置单独的字段,那么每个字段都是它自己的一部分。

这样,您将拥有一个元项,它仅由部件可以引用的 Id 组成。这将零件固定在一起。然后,您将用户不是映射到项目而是映射到部件,并从部件的公共 Id 重建项目视图。

【讨论】:

  • 抱歉耽搁了,感谢您的回答。场景相当简单:item-Model 有一大堆可能的字段,每个用户只能访问其中的一小部分。我认为这必须在模型(而不是视图)中实现才能概括它。您将如何构建这样的过滤器?
【解决方案2】:

第二种方法是不在模型层中包含过滤。即,您将模型层上的映射保持原样,并为每个用户检索完整的项目字段集。然后,您将项目通过实现规则的过滤器。

哪种方法更适合您取决于您​​要如何过滤。如果是固定类型的用户,我可能会实现基于规则的后处理器,如果它非常动态,我会建议我的earlier answer 中的方法。将过滤规则放在模型中的另一个原因是,如果您想在无法重用过滤引擎的应用程序中重用模型(例如,如果您有不同语言的应用程序共享同一个数据库)。

【讨论】:

    猜你喜欢
    • 2013-01-27
    • 2021-04-21
    • 2018-05-07
    • 1970-01-01
    • 2021-03-07
    • 2014-02-07
    • 2015-06-18
    • 1970-01-01
    • 2021-09-26
    相关资源
    最近更新 更多