首先,我看過question,但它已經過了一年多了。當然,在用戶點擊Admin中的保存按鈕之後,Django 1.1.1中有一個很好的方法可以進行過濾器選擇。如何在Django保存後保留過濾器選擇管理
在包含數千條記錄的表格中,過濾是必不可少的。而且,如果用戶做出多個過濾器選擇,則不必重複該過程。
首先,我看過question,但它已經過了一年多了。當然,在用戶點擊Admin中的保存按鈕之後,Django 1.1.1中有一個很好的方法可以進行過濾器選擇。如何在Django保存後保留過濾器選擇管理
在包含數千條記錄的表格中,過濾是必不可少的。而且,如果用戶做出多個過濾器選擇,則不必重複該過程。
答案仍然相同:開箱即用,Django不支持這種行爲。問題跟蹤器中有兩張票附有補丁:#3777,#6903。 this comment中的中間件類不需要修改Django代碼。
另一種方法是使用這個片段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
的好處是你不用砍東西。
此功能作爲1.6版本的一部分添加到Django中,現在默認啓用。它在release notes描述:現在
的ModelAdmin創建後保留在列表視圖中的過濾器, 編輯或刪除的對象。通過將preserve_filters屬性 設置爲False,可以恢復以前的 清除過濾器的行爲。
我喜歡中間件解決方案。謝謝! – 2009-12-29 20:33:42
不錯的發現...希望我可以多次投票:) – 2009-12-29 21:48:59
很好,爲我的用戶解決了一個BIG問題!該補丁已經在那裏坐了6年了... – Roger 2013-04-06 17:59:22