2017-04-14 13 views
0

返さないI次のAjax POST呼び出しがあります。ジャンゴ - AJAXポストコールデータを使用してフィルタリングするオブジェクトが何も

$.ajax({ 
    type: "POST", 
    url: "{% url 'meds:prescription' %}", 
    data: {selected:'selected' , csrfmiddlewaretoken: "{{ csrf_token }}"}, 
    success: function(result) { 
     window.location = "{% url 'meds:prescription' %}"; 
    } 
}); 

選択例[5, 9, 17]

のIDの配列と、以下の図であり、

class PrescriptionView(generic.ListView): 
    template_name = 'meds/prescription.html' 
    context_object_name = 'meds' 
    model = Medicament 

    def post(self, request, **kwargs): 
     selected_ids = self.request.POST.getlist('selected[]') 
     meds = self.get_queryset().filter(id__in=selected_ids) 
     return render(request, self.template_name, {'meds': meds}) 

    def get_queryset(self): 
     ids = self.request.POST.getlist('selected[]') 
     return Medicament.objects.filter(id__in=ids) 

    def get_context_data(self, **kwargs): 
     ids = self.request.POST.getlist('selected[]') 
     context = super(PrescriptionView, self).get_context_data(**kwargs) 
     context.update({ 
      'meds': Medicament.objects.filter(id__in=ids), 
      'date': datetime.now() 
     }) 
     return context 

は私がやろうとしていることは、単にポストコールからのデータを用いて濾過オブジェクトと処方箋テンプレートにリダイレクトされるが、代わりに私のtemplat私は間違って何をしているのか分かりません。

+0

まず、あなたは、配列、 '「選択」'、文字列を送信することがないように見えます。第2に、ビューでは、何らかの理由で 'selected []'の値を取得しようとしています。 –

答えて

0

文字列selected:'selected'は配列ではありません。あなたのAJAXハンドラでselected周りの単一引用符を削除します。

data: {selected:'selected' , csrfmiddlewaretoken: "{{ csrf_token }}"}, 

は次のようになります。

data: {selected: selected, csrfmiddlewaretoken: "{{ csrf_token }}"}, 
+0

私もそれを試してみました。どちらもうまくいきませんでした。 – Meryem

+0

また、 'self.request.POST.getlist( 'selected')'で 'self.request.POST.getlist( 'selected'] ')'を変更しようとしましたか? –

+0

コードを振り返ると、コードに重大な欠陥があります。なぜあなたはajax呼び出しの '成功'を更新しているのですか? 'window.location =" {%url 'meds:prescription'%} "; JSONレスポンスをあなたのビューから返信しないのはなぜですか? –

関連する問題