在django admin中为不是超级管理员的用户排除某个字段

时间:2010-08-12 04:38:37

标签: django django-admin django-forms

如果用户不是超级管理员,我将如何在django admin中排除某个字段?

感谢

4 个答案:

答案 0 :(得分:4)

我是这样做的:

admin.py

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方法。

请参阅:Django admin: exclude field on change form only

答案 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'))