2013-04-21 3 views
4

У меня есть действие администратора, которое хранит текущий сеанс и класс обработчика (подкласс object), и перенаправляет на другую страницу, которая обрабатывает выбор. По какой-то причине, однако, всякий раз, когда я это делаю, весь сеанс теряется.Сессия Django неожиданно теряет данные

На самом деле происходит то, что я получаю сообщение об ошибке при вызове функции просмотра, в которой сеанс не имеет ключа «action_options». Копаясь в том, что на самом деле происходит, переменные устанавливаются в сеансе отлично, но к моменту появления представления сеанс полностью пуст, включая логины администратора, которые определенно были там раньше. Все остальные страницы (т. Е. Встроенные страницы администратора) загружаются штрафом.

Вот действие:

def myaction(self, request, queryset): 
    opts = request.session.setdefault('action_options', {}) 
    opts['queryset'] = queryset 
    opts['handler'] = MyHandlerClass 
    request.session.modified = True 
    return HttpResponseRedirect(reverse('myapp.views.handler_view')) 

А вот точка зрения, которая в настоящее время просто печатает значения параметров:

def handler_view(request): 
    opts = request.session['action_options'] 
    return HttpResponse(str(opts)) 

Я также пытался хранить QuerySet непосредственно, т.е. request.session['queryset'] = queryset, но я получить такое же поведение. Однако, если я сохраню список первичных ключей, это будет хорошо.

Для справки, вот мое определение промежуточного слоя:

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware', 
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.middleware.csrf.CsrfViewMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware', 

    'johnny.middleware.LocalStoreClearMiddleware', 
    'johnny.middleware.QueryCacheMiddleware', 
) 

Я использую Джонни Кэш, со следующей конфигурацией:

CACHES = { 
    'default' : dict(
     BACKEND='johnny.backends.memcached.MemcachedCache', 
     LOCATION=['127.0.0.1:11211'], 
     JOHNNY_CACHE=True, 
    ) 
} 
JOHNNY_MIDDLEWARE_KEY_PREFIX = 'jc_myproj' 

ответ

0

QuerySet, прежде чем он будет выполнен, не может быть последовательным и хранится в сессии.

opts['queryset'] = list(queryset) 

Это сделало бы это список, но до сих пор вопрос, может ли это быть сериализации и десериализации. В основном, данные сеанса - это простой текст. Планируйте соответственно.

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