2017-08-05 82 views
2

我想根據用戶從下拉框中進行的選擇來篩選和顯示Django中的數據。我正在使用ajax調用向Django視圖發送請求。例如,當用戶選擇航空公司A時,Ajax會將該選擇的「值」作爲整數發送給Django後端,以過濾數據並將其發送回前端。這裏是我的代碼:Django/Ajax - 如何根據選擇過濾和顯示結果

HTML:

<form method="GET"> 
    <select id="airline-selected"> 
     {% for airline in airline_list %} 
      <option value="{{ airline.id }}"> 
      {{ airline.name }} 
      </option> 
     {% endfor %} 
    </select> 
    <input type="button" value="Update" id="selection-button" method="GET"> 
</form> 

阿賈克斯:

<script> 
     $("#selection-button").click(function(event) { 
      event.preventDefault(); 
      var airlineSelected = $('#airline-selected').find(":selected").val(); 

      $.ajax({ 
       url: "{% url 'charts_data' %}", 
       method: 'GET', 
       filter_category: parseInt(airlineSelected), 
       success: function(data){ 
       console.log(data) 
     }, 
       error: function(error_data){ 
       console.log("error") 
       console.log(error_data) 
     } 
      }) 
     }); 
    </script> 

Views.py:

class ChartData(generics.ListAPIView): 
    serializer_class = FinancialDataSerializer 

    def get_queryset(self, *args, **kwargs): 
     filter_category = self.request.GET.get("filter_category") 
     queryset = FinancialData.objects.filter(airline_id=filter_category) 
     queryset_filtered = queryset.filter() 
     return queryset_filtered 

我的console.log(數據)顯示空數組這意味着視圖不會被過濾。如何根據用戶所做的選擇過濾和顯示數據?

+0

如果您在視圖中獲得了「filter_category」的正確值,那麼您是否檢查過了?如果不添加'print(self.request.GET.get(「filter_category」))'語句。 – badiya

+0

@sasuke是在打印機上打印無,意味着它沒有通過正確的值。任何想法爲什麼?我無法理解這一點。 – Hannan

+0

看到我的答案,如果有幫助。 – badiya

回答

2

嘗試修改您的ajax代碼以添加data變量。

$.ajax({ 
    url: "{% url 'charts_data' %}", 
    method: 'GET', 
    data : { 
      filter_category: parseInt(airlineSelected) 
    } 
    success: function(data){ 
     console.log(data) 
    }, 
    error: function(xhr, errmsg, err){ 
     console.log("error") 
     console.log(error_data) 
    } 
}); 
+0

是的代碼工作。只爲我的信息,爲什麼filter_category:parseInt(airlineSelected)沒有工作,你推薦的變量工作?對你的男人很重要,你救了我的一天。 – Hannan

+0

很高興我能幫上忙。請選擇小勾並將其標記爲正確答案,以便對於其他人有同樣問題 – badiya

+0

要發送的任何數據與您的ajax請求一起發送,您需要將其指定爲名爲'data'的字典。 https://datatables.net/reference/option/ajax.data – badiya