2009-08-20 32 views
0

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

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

+0

所以,基本上,你有三个实体/模型/表:Item-MapItemUser-User?并且您希望MapItemUser充当过滤器,因此每个用户只能看到Item的一部分,这是否正确?你希望过滤器是完全动态的,还是存在,例如固定类型的用户(角色),他们总是可以看到相同的一组字段? – 2009-08-20 07:55:31

回答

0

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

通过这种方式,您将拥有一个元项目,该项目仅由部件可引用的Id组成。这将各部分结合在一起。然后,您可以将用户映射到不是项目,而是映射到部件,并从部件的公共Id重建项目视图。

+0

对不起,谢谢你的回答。该场景很简单:项目模型有一大堆可能的字段,每个用户只能访问一小部分这些字段。我认为这必须在模型中实现(而不是视图)来推广它。你会如何构建这样的过滤器? – schneck 2009-08-25 14:38:29

0

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

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