2011-07-25 13 views
5

Potrzebuję dodać niestandardowy widok do administratora Django. Powinno to być podobne do standardowego widoku listy zmian dla określonego modelu, ale z niestandardowym zestawem wyników. (Muszę wyświetlić wszystkie modele z pewną datą lub inną datą mniejszą niż dzisiaj, ale to nie jest tak istotne).Administrator Django - niestandardowy widok listy zmian

Jeden sposób mogę to zrobić za pomocą metody Admin queryset, jak

class CustomAdmin(admin.ModelAdmin): 
    ... 
    def queryset(self, request): 
     qs = super(CustomAdmin, self).queryset(request) 
     if request.path == 'some-url': 
      today = date.today() 
      # Return a custom queryset 
     else: 
      return qs 

Daje to pewność, że ...

Problem polega na tym, że nie wiem, jak związać some-url do standardowy widok listy zmian.

Odpowiedz

5

Potrzebujesz drugiego adresu URL, który przechodzi do widoku listy zmian, aby można było sprawdzić, który z dwóch adresów był zgodny z żądanym adresem URL, a następnie odpowiednio zmienić zapytanie? Po prostu naśladuj działanie django.contrib.admin.options i dodaj kolejny adres URL do narzędzia ModelAdmin.

powinien wyglądać mniej więcej tak:

class CustomAdmin(admin.ModelAdmin): 

    def get_urls(self): 
     def wrap(view): 
      def wrapper(*args, **kwargs): 
       kwargs['admin'] = self # Optional: You may want to do this to make the model admin instance available to the view 
       return self.admin_site.admin_view(view)(*args, **kwargs) 
      return update_wrapper(wrapper, view) 

     # Optional: only used to construct name - see below 
     info = self.model._meta.app_label, self.model._meta.module_name 

     urlpatterns = patterns('', 
      url(r'^my_changelist/$', # to your liking 
       wrap(self.changelist_view), 
       name='%s_%s_my_changelist' % info) 
     ) 
     urlpatterns += super(CustomAdmin, self).get_urls() 
     return urlpatterns 
Powiązane problemy