2010-08-12 8 views

Antwort

4

ich es auf diese Weise tat:

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

, aber ich brauche auch mit dem change_view zu wiederholen :(jemand eine andere Methode haben? dank – Asinox

+0

Sie nicht das gleiche tun für 'change_view'? –

+0

alles in Ordnung, ich tat es , nur würde ich gerne wissen, ob es einen anderen Weg gibt :) – Asinox

0

Wenn Sie viele Ansichten haben, können Sie diese Dekorateur verwenden können:

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 

Verwendung: @exclude (fields = ('fonction', 'fonction_ar'))

3

Das Überschreiben der Eigenschaft exclude ist ein wenig gefährlich, es sei denn, Sie erinnern sich, es für andere Berechtigungen zurückzusetzen, ein besserer Weg könnte sein, die Methode get_form zu überschreiben.

sehen: Django admin: exclude field on change form only