2009-12-29 2 views
2

У меня проблема с хранением большого набора запросов в сеансе. Этот запрос выполняется из поиска, и мне нужно сохранить его для paginate внутри каждого результата. Это код, на мой взгляд:хранить запрос в сеансе с django

c = queryset.order_by('-order') 
request.session['query_search'] = c 

Вы можете увидеть пример на моем сайте: http://www.lukmi.com/escorts/barcelona/ Это список результатов (в QuerySet) и хранить его в сессии, потому что мне нужно, чтобы использовать его в каждый профиль переходит к следующему профилю.

У меня есть проблемы с хранением, потому что он очень большой. Кто-нибудь знает хорошее решение?

ответ

3

Вы можете сохранить только список ПК, а затем запросить их, когда вам нужно.

0

Или вы можете сохранить sql, сгенерированный запросом, а затем выполнить.

request.session['query_search'] = c.query.as_sql() 
+0

Проблема с этим способом заключается в том, что результаты запроса могут изменяться со страницы на страницу. –

3

В настоящее время я разрабатываю очень похожий сайт и в Django. Я хранил запрос в кеше, где кэш-ключ - это строка параметров поиска по urlencoded - таким образом, если кто-то выполняет одинаковый поиск, ему не нужно повторять дорогостоящие запросы, чтобы получить те же результаты.

В вашем случае вы можете сгенерировать список параметров из url.

form = form_class(request.POST) 
    if form.is_valid(): 
     cd = form.cleaned_data 
     persons = .... #expensive queries that fetch the results of search 

     cache_id = urlencode(cd.items()) 
     #create md5 hash to use in link to results 
     cache_id = hashlib.md5(cache_id).hexdigest() 
     cache.set(cache_id, persons, CACHE_TIMEOUT) 

     #also store form data in cache, so the form can be easily reconstructed from cache id 
     cache.set(cache_id+'_form', request.POST, CACHE_TIMEOUT) 
0

Большие сессии едят ресурсы (я полагаю, Django не делает для этого исключения).
Сделайте это списком JSON, затем используйте локальное хранилище браузера пользователя: http://jstorage.info, плагин jQuery, кросс-браузер.
Вам понадобится способ узнать, устарели ли данные (контрольная сумма? Еще не нашли решение), чтобы вернуться на сервер и попросить новый шаблон JSON var в шаблоне.

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

  • Нет связанных вопросов^_^