如果用户不是超级管理员,我将如何在django admin中排除某个字段?
感谢
答案 0 :(得分:4)
我是这样做的:
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)
答案 1 :(得分:3)
覆盖exclude属性有点危险,除非您记得将其设置为其他权限,更好的方法可能是覆盖get_form
方法。
答案 2 :(得分:1)
将来看起来会有一个get_fields钩子。但它只在主分支中,而不是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
答案 3 :(得分:0)
如果你有很多观点,你可以使用这个装饰:
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'))