2010-02-17 14 views
6

Próbuję utworzyć pasek postępu przesyłania django wewnątrz administratora django. Aplikacja jest tylko niewielką częścią projektu, dlatego nie chcę ustawiać niestandardowej procedury obsługi przesyłania w pliku settings.py.Jak ustawić django upload_handler w admin?

Moduł upload_handler można ustawić za pomocą request.upload_handlers.insert(0, UploadProgressHandler(request)), ale nie w add_view klasy admin django. Odpowiedzią jest to wyjątek:

Jeśli spróbujesz zmodyfikować request.upload_handlers po przeczytaniu z request.POST lub request.FILES Django wygeneruje błąd.

Próbowałem też robi to z dekoratora nad add_view ale nie wiem, jak uzyskać dostęp do request.upload_handlers.

Czy ktoś może mi pomóc?

Odpowiedz

1

Wystarczy popatrzeć na źródło dla dekoratora, który pochodzi z app admin:

def staff_member_required(view_func): 
    """ 
    Decorator for views that checks that the user is logged in and is a staff 
    member, displaying the login page if necessary. 
    """ 
    @wraps(view_func) 
    def _checklogin(request, *args, **kwargs): 
     if request.user.is_active and request.user.is_staff: 
      # The user is valid. Continue to the admin page. 
      return view_func(request, *args, **kwargs) 

Dekorator „zawija” oryginalnego widoku, dzięki czemu są w stanie sprawdzić żądania arg przed wywołaniem oryginalnego widoku func z tym.

+0

Dla szybkiego odniesienia, oto moduł, o którym mowa: https://github.com/django/django/blob/1.4.10/django/contrib/admin/views/decorators.py –