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

Django应用404错误:Booking查询匹配失败求助

Django UpdateView 404错误:Slug参数名不匹配导致无法找到对象

问题根源

你遇到的404错误核心原因是URL捕获的参数名与视图中读取的参数名不匹配:

  • 在urls.py中,路径定义为<str:slug>,Django会将URL对应部分以键slug存入视图的self.kwargs
  • 但在EditBookingView的get_object和get_context_data方法里,你试图读取booking_reference这个不存在的键,导致实际拿到的参数值为None,自然无法匹配到数据库中的Booking实例

解决方案(二选一)

方案一:修改视图适配URL参数名(推荐)

修改EditBookingView中两处读取参数的代码,将booking_reference替换为slug:

class EditBookingView(UpdateView, NextUrlMixin):
    model = Booking
    form_class = BookingForm
    template_name = 'bookings/edit_booking.html'
    success_url = '/'
    default_next = '/'

    def form_valid(self, form):
        form.instance.user = self.request.user
        form.save()
        next_path = self.get_next_url()
        return redirect(next_path)

    def get_context_data(self, **kwargs):
        context = super(EditBookingView, self).get_context_data(**kwargs)
        context['slug'] = self.kwargs['slug']  # 修正参数名
        return context

    def get_object(self):
        slug = self.kwargs.get('slug')  # 修正参数名
        return get_object_or_404(Booking, booking_reference=slug)

方案二:修改URL适配视图参数名

若不想改动视图代码,可修改urls.py中的路径参数名,并同步更新模板的URL反向解析:

  1. 修改urls.py:
urlpatterns = [
    # ... 其他路径同理修改 ...
    path('editbooking/<str:booking_reference>/', EditBookingView.as_view(), name='edit_booking'),
]
  1. 修改模板中的链接:
<div class="row text-center mt-3">
    <a class="btn btn-primary justify-content-md-center mb-5" href='{% url "bookings:edit_booking" booking_reference=item.booking_reference %}' role="button" >Edit Booking</a>
</div>

额外调试技巧

可以在get_object方法中添加打印语句,确认实际传入的参数:

def get_object(self):
    print("传入的kwargs:", self.kwargs)  # 查看所有参数
    slug = self.kwargs.get('slug')
    print("获取到的slug值:", slug)
    return get_object_or_404(Booking, booking_reference=slug)

运行服务器后查看控制台输出,即可明确参数是否正确传递。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 03:31:35