You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 03:43:23