2011-07-25 31 views
5

我需要將自定義視圖添加到Django Admin。這應該與某個模型的標準ChangeList視圖類似,但是具有自定義結果集。 (我需要顯示具有某個日期的所有模型其他日期比今天少,但這不是真的相關)。我能做到這一點Django Admin - 自定義更改列表視圖

的一種方法是使用管理queryset方法,像

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 

這可以確保...

的問題是,我不知道如何配合some-url到一個標準的ChangeList視圖。

回答

5

因此,您希望第二個URL進入更改列表視圖,以便您可以檢查所請求的URL中的哪兩個,然後相應地更改查詢集? 只是模仿django.contrib.admin.options所做的事情,並向ModelAdmin添加另一個URL。

應該是這個樣子:

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