2009-12-29 3 views
2

세션에 큰 쿼리 세트를 저장하는 데 문제가 있습니다. 이 쿼리 세트는 검색 결과이므로 모든 결과 안에 페이지 매기기로 저장해야합니다. 당신은 내 사이트에서 예를 볼 수 있습니다django와 함께 세션에 쿼리 세트 저장

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

: 이것은 내보기에 코드입니다 http://www.lukmi.com/escorts/barcelona/ 이 결과합니다 (검색어 세트)의 목록입니다 나는 그것을 사용할 필요가 있기 때문에 세션에 저장 각 프로필은 다음 프로필로 이동합니다.

매우 커서 때문에 저장할 문제가 있습니다. 누구든지 좋은 해결책을 알고 있습니까?

답변

3

PK 목록 만 저장 한 다음 필요할 때 쿼리 할 수 ​​있습니다.

0

또는 쿼리로 생성 된 SQL을 저장 한 다음 실행할 수 있습니다.

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

이렇게하면 쿼리 결과가 페이지마다 변경 될 수 있습니다. –

3

나는 현재 장고에서도 매우 비슷한 사이트를 개발 중입니다. 캐시 키가 검색 매개 변수의 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

큰 세션은 ressources를 먹습니다. (장고는 예외가 아닙니다.)
JSON 목록으로 만들고 사용자의 브라우저 로컬 저장소 인 http://jstorage.info (jQuery 플러그인, 크로스 브라우저)을 사용합니다.
서버로 돌아가서 템플릿에 새 JSON var을 요청하려면 데이터가 오래된 것인지 (체크섬? 아직 해결책을 찾지 못했음) 알 필요가 있습니다.