Django+Ajax验证字段唯一性时视图获取值为None的问题
问题根源:请求参数名不匹配
你遇到的问题核心其实很直白——前端AJAX发送的参数名和后端视图接收的参数名对不上!
对比下你的代码就能发现:
- 在
validation.js里,AJAX请求传递的参数是{'tipaux': tipaux},也就是参数名叫tipaux - 但在
views.py的validar_tipaux函数中,你用request.GET.get('codigo', None)来取值,找的是名叫codigo的参数
这就导致后端根本拿不到前端传过来的字段值,所以打印出来的codigo自然是None。
修复方案(二选一即可)
方案1:修改前端JS的参数名,和后端保持一致
把JS里的参数名改成codigo,和视图里接收的名称对齐:
$("#id_codigo").change(function () { var tipaux = $(this).val(); console.log(tipaux); $.ajax({ url: '/ajax/validar_tipaux/', data: { 'codigo': tipaux }, // 这里把参数名从tipaux改成codigo dataType: 'json', success: function (data) { if (data.is_taken) { console.log('Existe'); alert("That value is already taken."); } } }); });
方案2:修改后端视图的参数名,和前端保持一致
把视图里获取参数的名称改成tipaux,适配前端传过来的参数:
def validar_tipaux(request): codigo = request.GET.get('tipaux', None) # 这里把获取的参数名从codigo改成tipaux print(codigo) data = { 'is_taken': TipoAux.objects.filter(codigo__iexact=codigo).exists() } return JsonResponse(data)
额外调试小技巧
以后遇到这类AJAX问题时,可以打开浏览器开发者工具(按F12),切换到Network标签,找到发送的AJAX请求,查看它的Query String Parameters,就能直观看到前端到底传了什么参数,和后端接收的是否匹配,排查问题会高效很多~
内容的提问来源于stack exchange,提问作者Gonzalo Dambra
相关产品推荐
相关产品推荐

