2009-12-29 118 views
5

首先,我看過question,但它已經過了一年多了。當然,在用戶點擊Admin中的保存按鈕之後,Django 1.1.1中有一個很好的方法可以進行過濾器選擇。如何在Django保存後保留過濾器選擇管理

在包含數千條記錄的表格中,過濾是必不可少的。而且,如果用戶做出多個過濾器選擇,則不必重複該過程。

回答

8

答案仍然相同:開箱即用,Django不支持這種行爲。問題跟蹤器中有兩張票附有補丁:#3777#6903this comment中的中間件類不需要修改Django代碼。

+0

我喜歡中間件解決方案。謝謝! – 2009-12-29 20:33:42

+0

不錯的發現...希望我可以多次投票:) – 2009-12-29 21:48:59

+0

很好,爲我的用戶解決了一個BIG問題!該補丁已經在那裏坐了6年了... – Roger 2013-04-06 17:59:22

0

另一種方法是使用這個片段http://djangosnippets.org/snippets/2531/

Class Modeladmin_perso(admin.ModelAdmin): 
def add_view(self, request, *args, **kwargs): 
    result = super(Modeladmin_perso, self).add_view(request, *args, **kwargs) 

    # Look at the referer for a query string '^.*\?.*$' 
    ref = request.META.get('HTTP_REFERER', '') 
    if ref.find('?') != -1: 
     # We've got a query string, set the session value 
     request.session['filtered'] = ref 

    if request.POST.has_key('_save'): 
     """ 
     We only kick into action if we've saved and if 
     there is a session key of 'filtered', then we 
     delete the key. 
     """ 
     try: 
      if request.session['filtered'] is not None: 
       result['Location'] = request.session['filtered'] 
       request.session['filtered'] = None 
     except: 
      pass 
    return result 
""" 
Used to redirect users back to their filtered list of locations if there were any 
""" 
def change_view(self, request, object_id, extra_context={}): 
    """ 
    save the referer of the page to return to the filtered 
    change_list after saving the page 
    """ 
    result = super(Modeladmin_perso, self).change_view(request, object_id, extra_context) 

    # Look at the referer for a query string '^.*\?.*$' 
    ref = request.META.get('HTTP_REFERER', '') 
    if ref.find('?') != -1: 
     # We've got a query string, set the session value 
     request.session['filtered'] = ref 

    if request.POST.has_key('_save'): 
     """ 
     We only kick into action if we've saved and if 
     there is a session key of 'filtered', then we 
     delete the key. 
     """ 
     try: 
      if request.session['filtered'] is not None: 
       result['Location'] = request.session['filtered'] 
       request.session['filtered'] = None 
     except: 
      pass 
    return result 

的好處是你不用砍東西。

0

此功能長期以來一直是對Django項目的請求(ticket已於5年前開放)。

幸運的是這個令人討厭的行爲是fixed在trunk中。期待它被包含在Django 1.6中。

3

此功能作爲1.6版本的一部分添加到Django中,現在默認啓用。它在release notes描述:現在

的ModelAdmin創建後保留在列表視圖中的過濾器, 編輯或刪除的對象。通過將preserve_filters屬性 設置爲False,可以恢復以前的 清除過濾器的行爲。