2011-07-25 27 views
5

Django Yönetimine özel bir görünüm eklemem gerekiyor. Bu, belirli bir model için standart bir ChangeList görünümüne benzer olmalı, ancak bir özel sonuç kümesiyle. (veya numaralı tüm modelleri, bugün olduğundan daha az bir tarihle görüntülemem gerekiyor, ancak bu gerçekten alakalı değil). Bunu yapabilirimDjango Yönetici - Özel değişiklik listesi görünümü

bir yolu bu

sorun ben some-url kravat nasıl bilmiyorum ki ... emin olur

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 

gibi Yönetici queryset yöntemi kullanılarak gereğidir standart bir ChangeList görünümü.

cevap

5

Bu nedenle, değişkeni görünümüne giden ikinci bir URL istersiniz, böylece ikisinden hangisinin istenen URL tarafından kontrol edildiğini kontrol edip, sonra da queryset'i buna göre değiştirirsiniz? Sadece django.contrib.admin.options öğesinin ne yaptığını taklit edin ve ModelAdmin'e başka bir URL ekleyin.

şuna benzer olmalı:

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 
İlgili konular