2 Stimmen

Speichern eines Querysets in der Session mit Django

Ich habe ein Problem beim Speichern eines großen Querysets in der Sitzung. Dieses Queryset stammt aus einer Suche und ich muss es für die Paginierung in jedem Ergebnis speichern. Dies ist der Code in meiner Ansicht:

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

Ein Beispiel können Sie auf meiner Website sehen: http://www.lukmi.com/escorts/barcelona/ Dies ist eine Liste von Ergebnissen (das Queryset), die ich in der Sitzung speichere, weil ich sie in jedem Profil verwenden muss, um zum nächsten Profil zu gelangen.

Ich habe einige Probleme, es zu speichern, weil es sehr groß ist. Weiß jemand eine gute Lösung?

4voto

Sie könnten nur die Liste der PKs speichern und diese dann bei Bedarf abfragen.

3voto

fest Punkte 1515

Ich bin derzeit die Entwicklung einer sehr ähnlichen Website zu Ihnen auch in Django. Ich habe das Queryset im Cache gespeichert, wobei der Cache-Schlüssel eine urlencodierte Zeichenkette von Suchparametern ist - auf diese Weise muss jemand, der eine identische Suche durchführt, nicht die teuren Abfragen wiederholen, um die gleichen Ergebnisse zu erhalten.

In Ihrem Fall können Sie die Parameterliste aus der Url generieren.

 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)

0voto

diegueus9 Punkte 25172

Oder Sie können die von der Abfrage erzeugte Sql-Datei speichern und dann ausführen.

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

0 Stimmen

Das Problem bei dieser Vorgehensweise ist, dass sich die Abfrageergebnisse von Seite zu Seite ändern können.

0voto

Große Sitzungen verbrauchen Ressourcen (ich nehme an, Django macht da keine Ausnahme).
Machen Sie eine JSON-Liste daraus und verwenden Sie den lokalen Speicher des Browsers des Benutzers: http://jstorage.info , ein jQuery-Plugin, browserübergreifend.
Sie benötigen eine Möglichkeit, um festzustellen, ob die Daten veraltet sind (Prüfsumme? habe die Lösung noch nicht gefunden), um zurück zum Server zu gelangen und eine neue JSON-Var in der Vorlage anzufordern.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X