2017-08-05 53 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