Исключить поле в админке django для пользователей, не являющихся супер админами - PullRequest
6 голосов
/ 12 августа 2010

как я исключу поле в админке django, если пользователи не супер админ?

спасибо

Ответы [ 4 ]

4 голосов
/ 12 августа 2010

Я сделал это следующим образом:

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)
3 голосов
/ 16 июня 2011

Переопределение свойства exclude немного опасно, если вы не забудете установить его обратно для других разрешений, лучшим способом может быть переопределение метода get_form.

см .: Администратор Django: исключить поле только в форме изменений

1 голос
/ 21 октября 2013

В будущем, похоже, будет хук 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

0 голосов
/ 08 апреля 2011

Если у вас много просмотров, вы можете использовать этот декоратор:

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

...