ValueError: Cannot use None as a query value django ajax

ValueError: Cannot use None as a query value django ajax

我想通过 Ajax 调用显示带有数据响应的下拉列表。一切正常,但我收到此 ValueError: Cannot use None as a query value 错误。

查看:

def load_brand(request):
     if request.is_ajax():
         term = request.GET.get('term')
         brand = Brand.objects.all().filter(brand__icontains=term)

     return JsonResponse(list(brand.values()), safe=False)

ajax:

  $('#id_brand').select2({
      ajax: {
          url: '/brand/ajax/load-brand/',
          dataType: 'json',
          processResults: function (data) {
              return {
                  results: $.map(data, function (item) {
                      return {id: item.id, text: item.brand};
                  })
              };
          }
      },
      minimumInputLength: 1
  });

在你的 ajax 调用中你没有发送 data 即:哪个用户在 select2 中输入并且你正在访问它们即:request.GET.get('term') 这是空的所以你的 .filter(brand__icontains=term) 给你错误,因为 term 值为空。

您也可以在 ajax 调用中添加以下内容 :

 $('#id_brand').select2({
  ajax: {
    url: '/brand/ajax/load-brand/',
    dataType: 'json',
    data: function(params) {
      var query = {
        term: params.term, //this will be paass
        type: 'public' //optional..
      }
      // Query parameters will be ?term=[values]&type=public
      return query;
    },
    processResults: function(data) {
      return {
        results: $.map(data, function(item) {
          return {
            id: item.id,
            text: item.brand
          };
        })
      };
    }
  },
  minimumInputLength: 1
});

此外,在您的服务器端,您可以检查 term 是否有任何值,即:

 if term:
     brand = Brand.objects.all().filter(brand__icontains=term)

更多信息请查看this