2009-12-29 2 views
5

Во-первых, я посмотрел на это question, но его на год. Разумеется, теперь в Django 1.1.1 есть хороший способ переноса выбора фильтра после того, как пользователь нажимает кнопку сохранения в Admin.Как сохранить выбор фильтра после сохранения в Django Admin

В таблице с тысячами записей важна фильтрация. И если пользователь делает несколько вариантов выбора фильтра, это усилие не должно повторяться.

ответ

8

Ответ все тот же: из коробки Django не поддерживает это поведение. Есть несколько билетов в трекер проблемы с исправлениями: #3777, #6903. Класс промежуточного ПО в this comment работает без изменения кода Django.

+0

Мне нравится промежуточное решение. Благодаря! –

+0

Ницца найти ... хочу, чтобы я мог голосовать более одного раза :) –

+0

Отлично, решает БОЛЬШУЮ проблему для моих пользователей! Этот патч сидит там 6 лет ... – Roger

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 в багажнике. Ожидайте, что он будет включен в Django 1.6.

3

Эта функция была добавлена ​​в Django как часть версии 1.6 и теперь включена по умолчанию. Он описан в release notes:

ModelAdmin Теперь сохраняет фильтры на списке после создания, редактирования или удаления объекта. Можно восстановить предыдущее поведение фильтров очистки, установив атрибут preserve_filters в значение False.

Смежные вопросы