2016-11-22 2 views
0

Ich speichere einige Formularwerte, das ist ein Listenfilter, von einer Post-Methode in der request.session, um es in einer anderen Ansichtsfunktion zu verwenden die gefilterten Ergebnisse Das Problem ist, dass jeder Benutzer, den ich anmelde, die Ergebnisse speichert. Wenn er direkt auf die Ergebnisseite zugreift, werden andere Benutzer Ergebnisse filtern.Sitzung verwenden, um Formulareingabewerte zu speichern, um uso in einer anderen Ansicht zu verwenden

Ich verwende Paginierung (Digg ohne AJAX), ich benutze Django-El-Paginierung.

die views.py

def search(request): 
    if request.method == 'POST': 
     form = ComprarBuscaForm(request.POST) 
     if form.is_valid(): 
      cidade = form.cleaned_data['cidade'] 
      request.session['cidade'] = form.cleaned_data['cidade'] 
      request.session['quartos'] = form.cleaned_data['quartos'] 
      request.session['tipo_imovel'] = form.cleaned_data['tipo_imovel'] 
      request.session['preco_minimo'] = form.cleaned_data['preco_minimo'] 
      request.session['preco_maximo'] = form.cleaned_data['preco_maximo'] 
      request.session['area_minima'] = form.cleaned_data['area_minima'] 
      request.session['area_maxima'] = form.cleaned_data['area_maxima'] 
      return HttpResponseRedirect(reverse('imoveis:resultado_busca')) 

    else: 
     form = ComprarBuscaForm() 
    return render (request, 'imoveis/busca_comprar.html', {'form':form}) 

def search_result(request): 
    anuncios = Anuncio.objects.filter(quartos=request.session['quartos'], 
            cidade=request.session['cidade'], 
            tipo_imovel=request.session['tipo_imovel'], 
            preco_venda__gte=request.session['preco_minimo'], 
            preco_venda__lte=request.session['preco_maximo'], 
            area_construida__gte=request.session['area_minima'], 
            area_construida__lte=request.session['area_maxima'], 
            tipo_anuncio='Venda') 
    return render(request, 'imoveis/resultado_busca_comprar.html', {'anuncios': anuncios}) 

Alles funktioniert gut, obwohl die Tatsache, dass ich bereits erwähnt. Ich frage mich, ob das, was ich tue, der richtige Ansatz für diese Art von Situation ist.

+0

Es ist nicht klar, was Sie sagen. Sitzungen sind für einen Benutzer spezifisch. Wenn Sie zur Suchergebnisseite gehen, werden nur die Abfrageergebnisse angezeigt, die in der Sitzung dieses Benutzers gespeichert sind. –

+0

@DanielRoseman, das ist was ich dachte, als ich den Code schrieb. Aber ich verstehe nicht, warum es passiert, das ist der Kern meiner Frage. –

+0

@DanielRoseman, ich habe die Tests erneut gemacht. Mein Anmeldesystem führte die Konten mit derselben E-Mail zusammen, und bei meinen Tests wurde mein Benutzername und mein Google Mail-Konto verwendet. Der Code funktioniert. Wenn ich nun versuche, auf die Ergebnisseite zuzugreifen, wird ein Fehler gefunden, weil keine Variable request.session gespeichert wird. –

Antwort

0

Ist es wirklich notwendig, zwei Ansichten dafür zu verwenden? Ich würde in der gleichen Form filtern und rendern, wenn ich du wäre.

def search(request): 
    if request.method == 'POST': 
     form = ComprarBuscaForm(request.POST) 
     if form.is_valid(): 
      anuncios = Anuncio.objects.filter(quartos=request.session['quartos'], 
            cidade=request.session['cidade'], 
            tipo_imovel=form.cleaned_data['tipo_imovel'], 
            preco_venda__gte=form.cleaned_data['preco_minimo'], 
            preco_venda__lte=form.cleaned_data['preco_maximo'], 
            area_construida__gte=form.cleaned_data['area_minima'], 
            area_construida__lte=form.cleaned_data['area_maxima'], 
            tipo_anuncio='Venda') 
      return render(request, 'imoveis/resultado_busca_comprar.html', {'anuncios': anuncios}) 

    else: 
     form = ComprarBuscaForm() 
    return render (request, 'imoveis/busca_comprar.html', {'form':form}) 
+0

Es ist nicht möglich, die Seitennummerierung auf diese Weise zu verwenden. –

Verwandte Themen