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

如何在Django视图中获取JQuery AJAX传递的表单字段值?

问题分析与解决方案

首先,你的jQuery代码里有两个关键错误,导致Django视图无法正确获取传递的参数,先修正这些问题,再来看如何在视图中读取值。

第一步:修正jQuery代码的错误

你当前的代码在获取表单数据和传递参数的方式上存在问题:

  • $(this).attr("id_coin") 是错误用法:this 已经指向触发事件的元素(比如#id_coin),不需要再通过attr获取id,而且你要传递的是元素的值,不是id本身。
  • AJAX的data参数需要是键值对格式,这样Django才能正确解析参数名称和对应的值。

修正后的jQuery代码:

// 处理buysell切换事件
$('#id_buysell').on('change', function(){
    console.log("buysell changed to: ", $(this).val());
    $.ajax({
        method: "GET",
        url: "/myportfolio/add_transaction",
        // 用键值对传递参数,键名和后续视图中要获取的名称一致
        data: {
            'buysell': $(this).val()
        },
        success: function(response) {
            console.log("AJAX response: ", response);
        }
    });
});

// 处理coin切换事件
$('#id_coin').on('change', function(){
    console.log("coin changed to: ", $(this).val());
    $.ajax({
        method: "GET",
        url: "/myportfolio/add_transaction",
        data: {
            'coin': $(this).val() // 键名设为'coin',方便视图读取
        },
        success: function(response) {
            console.log("AJAX response: ", response);
        }
    });
});

第二步:在Django视图中获取参数

当你用正确的键值对传递数据后,就可以在视图里通过request.GET.get()(推荐,避免键不存在报错)或者直接request.GET['key']来获取值:

def add_transaction(request):
    print(request.method)
    print("test1")
    print("所有GET参数: ", request.GET)
    
    if request.method == "GET":
        # 获取buysell参数,第二个参数是默认值,防止参数不存在时报错
        buysell_value = request.GET.get('buysell', None)
        # 获取coin参数
        coin_value = request.GET.get('coin', None)
        
        if buysell_value:
            print("获取到的buysell值: ", buysell_value)
        if coin_value:
            print("获取到的coin值: ", coin_value)
            
        if request.is_ajax():
            print("ajax test")
            data = { 'test': "test1" }
            form = TransactionForm(user = request.user, coin_price = GetCoin("Bitcoin").price)
            return JsonResponse(data)

额外注意事项

  • 优先使用request.GET.get('key', 默认值):如果前端没有传递该参数,直接用request.GET['key']会抛出KeyError异常,而get()方法会返回你设置的默认值(比如None),更安全。
  • 确保URL配置正确:/myportfolio/add_transaction必须正确映射到add_transaction视图。
  • 传递多参数:如果需要同时传递多个值,只需在data里添加更多键值对即可,比如data: {'buysell': buysell_val, 'coin': coin_val}。

内容的提问来源于stack exchange,提问作者SkillSet12345

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:26:26