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

通过AJAX向Django后端提交数据时出现查询不存在错误求助

排查Django AJAX提交时「Advice matching query does not exist」错误

嘿,这个问题我之前帮不少开发者排查过,核心原因基本都是后端查询逻辑和前端传参不匹配,咱们一步步拆解解决:

1. 先定位错误根源:Django的get()方法抛出异常

你看到的这个错误,本质是Django里用Advice.objects.get(...)查询时,找不到符合条件的对象。哪怕数据库里有这条记录,只要查询条件不对,就会触发这个异常。

2. 第一步:检查后端实际收到的参数

先在你的saveData视图函数里加一行打印,看看前端传过来的ansId到底是什么:

def saveData(request):
    if request.method == 'POST':
        # 打印所有POST参数,确认ansId的数值和类型
        print("Received POST data:", request.POST)
        # 后续逻辑...

比如如果前端传的ansId是字符串(比如"123"),但数据库里Advice的id是整数类型,虽然Django通常会自动转换,但有时候也会出问题,这时候可以手动转成整数:

ans_id = int(request.POST.get('ansId'))

3. 第二步:替换get()为更安全的查询方式

直接用get()太容易抛出异常,建议换成get_object_or_404或者先判断查询集是否存在:

方式一:用get_object_or_404(推荐)

from django.shortcuts import get_object_or_404

def saveData(request):
    if request.method == 'POST':
        ans_id = request.POST.get('ansId')
        # 如果找不到,会返回404,同时控制台会输出更清晰的日志
        advice = get_object_or_404(Advice, id=ans_id)
        # 后续处理逻辑...
        return JsonResponse({'status': 'success'})

方式二:先判断查询集是否存在

def saveData(request):
    if request.method == 'POST':
        ans_id = request.POST.get('ansId')
        advice_qs = Advice.objects.filter(id=ans_id)
        if not advice_qs.exists():
            # 明确返回错误信息给前端
            return JsonResponse({'error': 'Advice not found with this ID'}, status=404)
        advice = advice_qs.first()
        # 后续逻辑...

4. 第三步:确认前端传的ansId是否正确

在AJAX请求前,先打印一下data.ansId的值,确保它和数据库里Advice记录的id完全一致:

console.log("ansId being sent:", data.ansId); // 检查这个值是不是数据库里存在的ID
$.ajax({
    type: 'POST',
    url: '{% url "recsystem:saveData" %}',
    data: {
        'csrfmiddlewaretoken' : "{{ csrf_token }}",
        'ansId' : data.ansId,
        'queTitle': data.queTitle,
        'queText' : data.queText,
        'desc': data.desc,
        'optionType': data.optionType,
        'anstextArray': data.anstextArray
    },
    // 其他配置...
});

5. 额外排查点:数据库事务或缓存问题

如果以上都没问题,那可以确认下数据库里的记录是否真的提交了:

  • 用Django Shell执行查询:python manage.py shell,然后输入from yourapp.models import Advice; Advice.objects.filter(id=你的ansId).exists(),看看返回True还是False。
  • 如果是刚添加的记录,确认有没有未提交的事务(比如在视图里用了transaction.atomic()但没提交)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:12:08