Django无法查询数据库中已存在的数据问题求助
问题分析与修复方案
核心原因:请求参数带多余引号
从终端输出可见,你的query值是"http://shooka.com"(包含首尾双引号),但数据库中对应的serial_number是http://shooka.com(无引号),两者无法匹配,导致get_object_or_404触发404响应。
其他问题与修复步骤
1. 修正请求参数解析方式
前端AJAX POST通常发送JSON格式数据,直接解码request.body会保留原始引号,应该用json模块解析请求体:
import json @csrf_exempt def products(request): if request.method == 'POST': # 解析JSON格式的请求体 data = json.loads(request.body.decode('utf-8')) query = data.get('serial_number', '') # 假设前端传参的键为serial_number # ...后续逻辑
2. 修正get_object_or_404的用法
get_object_or_404的第一个参数必须是模型类,而非queryset(你当前传入的products是Products.objects.all()的查询集结果),正确写法:
# 错误写法 # get_object_or_404(products, serial_number=query) # 正确写法 target_product = get_object_or_404(Products, serial_number=query)
3. 适配AJAX请求的响应格式
前端是AJAX请求,返回HTML模板不符合预期,应返回JSON格式的产品详情:
from django.http import JsonResponse # 获取到target_product后 return JsonResponse({ 'prod_name': target_product.prod_name, 'serial_number': target_product.serial_number, 'comments': target_product.comments, 'pub_date': target_product.pub_date.strftime('%Y-%m-%d %H:%M:%S') })
4. 临时兼容:清理多余引号
如果暂时无法修改前端请求格式,可以先清理query的首尾引号做兼容:
query = query.strip('"')
完整修复后的视图代码
import json from django.http import JsonResponse from django.views.decorators.csrf import csrf_exempt from products.models import Products from django.shortcuts import get_object_or_404 @csrf_exempt def products(request): if request.method == 'POST': try: data = json.loads(request.body.decode('utf-8')) query = data.get('serial_number', '').strip('"') # 双重保险清理引号 target_product = get_object_or_404(Products, serial_number=query) return JsonResponse({ 'status': 'success', 'data': { 'prod_name': target_product.prod_name, 'serial_number': target_product.serial_number, 'comments': target_product.comments, 'pub_date': target_product.pub_date.strftime('%Y-%m-%d %H:%M:%S') } }) except json.JSONDecodeError: return JsonResponse({'status': 'error', 'message': '无效的JSON格式'}, status=400) else: return JsonResponse({'status': 'error', 'message': '仅支持POST请求'}, status=405)
内容的提问来源于stack exchange,提问作者illidan
相关产品推荐
相关产品推荐

