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

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类型,路由应该这么写:
    # urls.py
    from django.urls import path
    from . import views
    
    urlpatterns = [
        path('addstudents/<uuid:unique_id>/', views.addstudents, name='addstudents'),
    ]
    
    如果是字符串格式的UUID,就把<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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:58:52