Django中如何通过AJAX返回Queryset?现有代码无法返回内容求助
问题分析与解决办法
你的代码存在两个核心问题,导致AJAX请求无返回内容且无法渲染数据:
1. Django视图未返回有效响应
你的get_group_ajax视图仅完成了数据查询,但未将结果返回给前端。需要修改视图,通过JsonResponse返回JSON格式的产品列表:
from django.http import JsonResponse def get_group_ajax(request): if request.method == "GET": g_id = request.GET['group_id'] # 将QuerySet转为可序列化的列表 productlist = list(models.Stocksupporter.objects.filter(pmaingroups=g_id) .values('productname') .exclude(numberqut=0)) # 返回JSON格式数据 return JsonResponse(productlist, safe=False)
2. 前端模板标签无法在AJAX回调中执行
Django的模板标签(如{% for %})是在页面首次渲染阶段由服务器解析的,AJAX回调中的模板代码不会被处理。需要用JavaScript循环遍历返回的JSON数据,动态拼接HTML:
$("#allgrp").change(function () { const gId = $('#allgrp').val(); $.ajax({ type: "GET", url: '{% url "webapp:get_group_ajax" %}', data: { 'group_id': gId, }, success: function (data) { let html_data = ''; // 遍历返回的产品数据,拼接HTML data.forEach(pr => { html_data += ` <div class="cardc"> <p>${pr.productname}</p> </div> `; }); // 将拼接好的HTML渲染到容器中 $("#card_id2").html(html_data); } }); });
额外注意事项
- 确保
webapp:get_group_ajax已在项目的urls.py中正确配置路由 - 若后续改用POST请求,需在AJAX中携带CSRF令牌(可通过页面中的
{% csrf_token %}获取并添加到请求头或数据参数中)
内容的提问来源于stack exchange,提问作者NEBEZ
相关产品推荐
相关产品推荐

