Django编辑特定对象时出现“Booking matching query does not exist”错误
解决“Booking matching query does not exist”错误的思路
嘿,这个错误我做预订系统的时候也踩过坑,咱们一步步排查解决:
核心原因
这个错误本质是你用Booking.objects.get(unique_id=unique_id)查询时,数据库里找不到对应unique_id的记录——要么是参数传错了,要么是查询逻辑没处理异常。
1. 先检查URL路由和参数传递
首先得确保前端或跳转链接正确把unique_id传给了视图:
- 确认URL配置里正确捕获了UUID参数,如果你的
unique_id是UUID类型,路由应该这么写:
如果是字符串格式的UUID,就把# urls.py from django.urls import path from . import views urlpatterns = [ path('addstudents/<uuid:unique_id>/', views.addstudents, name='addstudents'), ]<uuid:unique_id>改成<str:unique_id>,同时要保证传递的参数和数据库记录完全一致(注意UUID的大小写,部分数据库对大小写敏感)。
2. 用更安全的查询方法替代直接get()
get()方法在找不到记录时会直接抛出异常,推荐用Django内置的get_object_or_404,它会自动捕获DoesNotExist异常,返回友好的404页面,修改你的视图代码:
# views.py from django.shortcuts import get_object_or_404, render def addstudents(request, unique_id=None): # 用get_object_or_404替代直接get() booking = get_object_or_404(Booking, unique_id=unique_id) # 你的后续逻辑...
3. 验证传递的unique_id是否正确
可以在视图里加个调试打印,看看实际接收到的unique_id是什么:
def addstudents(request, unique_id=None): print("接收到的unique_id:", unique_id) # 调试用,上线后可删除 booking = get_object_or_404(Booking, unique_id=unique_id) # ...
然后去数据库手动查询有没有这个unique_id的记录,大概率是传递时多了空格、或者UUID格式不完整(比如少了一段)。
4. 检查Booking模型的字段定义
最后确认你的Booking模型里unique_id字段配置正确:
# models.py import uuid from django.db import models class Booking(models.Model): unique_id = models.UUIDField( default=uuid.uuid4, unique=True, editable=False, verbose_name="唯一标识" ) # 其他字段...
如果用CharField存储UUID,要确保长度足够(UUID是36位字符),并且生成时格式正确。
内容的提问来源于stack exchange,提问作者Adam Dalton
相关产品推荐
相关产品推荐

