如何在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
相关产品推荐
相关产品推荐

