代码之家  ›  专栏  ›  技术社区  ›  Leopd

同一型号的django管理页的多个版本

  •  2
  • Leopd  · 技术社区  · 15 年前

    在我的django管理部分,我想根据当前登录的用户类型显示不同版本的管理页面。我可以想出一些方法来解决这个问题,但我还没有想出任何一种方法。

    也许我可以把逻辑放进管理员.模型管理员查看当前用户并动态更改“排除”字段。这样行吗?或者根据登录的用户运行不同的自定义模板,并让模板包含/排除相应的字段。

    我可以注册两个版本的管理员.模型管理员类,每种类型的用户一个,可能通过权限限制访问?但是权限系统似乎非常相信每个模型类有一组权限,所以我不知道如何改变这一点。

    我可以获取一些用于呈现管理页面模板的小部件,并将它们包含在我自己的页面中,以完成我需要强大用户才能完成的一项特定工作。

    如果您对此有任何建议,我们将不胜感激。

    谢谢你的提示。我是这样做的。。。

    def get_form(self, request, obj=None, **kwargs):
        """This dynamically inserts the "owners" field into the exclude list
        if the current user is not superuser.
        """
        if not request.user.is_superuser:
            if self.exclude:
                self.exclude.append('owners')
            else:
                self.exclude = ['owners']
        else:
            # Necessary since Admin objects outlive requests
            try:
                self.exclude.remove('owners')
            except:
                pass
    
    
        return super(OwnersModelAdmin,self).get_form(request, obj=None, **kwargs)
    
    1 回复  |  直到 15 年前
        1
  •  1
  •   Daniel Roseman    15 年前

    有相当多的钩子提供在 ModelAdmin 为这类事情上课。

    get_form

    这是值得一看的来源 模型管理员 -它在里面django.contrib.admin管理员.options-查看重写此方法或任何其他方法是否可以满足您的需要。