在我的django管理部分,我想显示管理页面的不同版本,具体取决于当前登录的用户类型。我可以想到这可能有多种用途,但还没弄明白如何做任何一件事。
也许我可以将逻辑放入admin.ModelAdmin来查看当前用户并动态更改'exclude'字段。那样有用吗?或者根据登录的人员运行不同的自定义模板,并让模板根据需要包含/排除字段。
我可以注册两个版本的admin.ModelAdmin类,每个类型一个用户,并且可能通过权限限制访问?但权限系统似乎相当深信每个模型类的一组权限,所以我不确定如何改变它。
我可以抓住几个用于渲染管理页面模板的小部件,并将它们包含在我自己的页面中,这个页面执行我需要强大的用户才能完成的一项特定工作。
我可以设置多个AdminSite并通过url / view系统限制对它们的访问。但后来我不确定如何使用不同的AdminSites注册不同的admin.ModelAdmin类。
对此有任何建议将不胜感激。
答案
感谢您的提示。我是这样做的......
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)
答案 0 :(得分:1)
ModelAdmin
类提供了很多钩子来处理这类事情。
一种可能性是覆盖get_form
方法。这将获取请求以及正在编辑的对象,因此您可以从那里获取当前用户,并返回依赖于用户的不同ModelForms。
值得查看ModelAdmin
的来源 - 它位于django.contrib.admin.options中 - 看看是否覆盖此方法或任何其他方法可能满足您的需求。