【发布时间】:2011-03-28 17:54:07
【问题描述】:
如果用户不是超级管理员,我将如何在 django admin 中排除一个字段?
谢谢
【问题讨论】:
标签: django django-admin django-forms
如果用户不是超级管理员,我将如何在 django admin 中排除一个字段?
谢谢
【问题讨论】:
标签: django django-admin django-forms
我是这样做的:
def add_view(self, request, form_url='', extra_context=None):
if not request.user.is_superuser:
self.exclude=('activa', )
return super(NoticiaAdmin, self).add_view(request, form_url='', extra_context=None)
【讨论】:
change_view做同样的事情吗?
如果你有很多视图,你可以使用这个装饰器:
def exclude(fields=(), permission=None):
"""
Exclude fields in django admin with decorator
"""
def _dec(func):
def view(self, request, *args, **kwargs):
if not request.user.has_perm(permission):
self.exclude=fields
return func(self, request, *args, **kwargs)
return view
return _dec
用法: @exclude(fields=('fonction', 'fonction_ar'))
【讨论】:
重写 exclude 属性有点危险,除非你记得为其他权限设置它,更好的方法可能是重写 get_form 方法。
【讨论】:
在未来,看起来会有一个 get_fields 钩子。但它只是在 master 分支中,不是 1.5 或 1.6。
def get_fields(self, request, obj=None):
"""
Hook for specifying fields.
"""
return self.fields
https://github.com/django/django/blob/master/django/contrib/admin/options.py
【讨论】: