2016-11-22 3 views
0

私は、request.sessionのpostメソッドからいくつかのフォーム値をリストフィルタとして保存して、別のビュー関数でレンダリングしますフィルタリングされた結果。問題は、ログインしたユーザーが結果を保存したままにしている場合です。結果ページに直接アクセスすると、他のユーザーが結果をフィルタリングすることになります。セッションを使用してフォーム入力値を保存し、別のビューで表示する

私はページングを使用しています(AJAXなしのdigg)、私はdjango-el-paginationを使用しています。

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}) 

すべては私が前に述べた事実が正常に動作しています。私がやっていることがこの種の状況に適切なアプローチであるかどうかは疑問です。

+0

あなたの言っていることは明確ではありません。セッションはユーザー固有のものであり、検索結果ページに行くとそのユーザーのセッションに格納されているクエリ結果のみが表示されます。 –

+0

@DanielRoseman、それは私がコードを書いた時です。しかし、私はなぜそれが起こっているのか分からない、これは私の質問の中核です。 –

+0

@DanielRoseman、もう一度テストをしました。私のログインシステムは、同じ電子メールでアカウントをマージしていました。私のテストでは、ユーザー名と私のgmailアカウントを使用していました。コードが動作しています。今、私は結果のページにエラーのaccourを処理しようとすると、要求されたセッション変数が格納されていないので、 –

答えて

0

これには2つのビューを使用することが本当に必要ですか?私がフィルタリングして、同じフォームビューでレンダリングします。

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

この方法で改ページを使用することはできません。 –

関連する問題