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

Django Web应用PK相关404错误排查:详情与更新页异常

Django详情页/更新页404错误排查(No storage found matching the query)

问题概述

访问descript/<int:pk>/和change-info/<int:pk>页面时触发404错误,提示No storage found matching the query,其余页面可正常访问。

排查与修复步骤

1. 确认数据库中存在对应PK的Storage记录

这是触发该404最直接的原因:你访问的pk=1可能根本不存在于数据库中。

  • 验证方式:
    1. 通过Django admin后台查看Storage模型的所有记录,确认是否有id=1的条目。
    2. 或使用Django Shell执行查询:
python manage.py shell
from base.models import Storage
# 检查pk=1的记录是否存在
print(Storage.objects.filter(pk=1).exists())

如果返回False,需先创建对应记录再访问页面。

2. 修复UpdateView类的代码错误

你的UpdateInfo类中缺失了success_url的赋值语句,虽然这不会直接导致404,但属于语法错误,必须修正:

# views.py中修改UpdateInfo类
class UpdateInfo(UpdateView):
    model = Storage
    fields = '__all__'
    success_url = reverse_lazy('list')  # 补充赋值语句,原代码仅写了reverse_lazy('list')

3. 处理查询集的用户过滤(可选但推荐)

由于Storage模型包含user外键,默认的DetailView和UpdateView会查询所有Storage记录,若当前登录用户与目标记录的user不匹配(或记录未关联用户),也可能触发404。建议重写get_queryset方法确保数据隔离:

# views.py中引入LoginRequiredMixin并修改视图类
from django.contrib.auth.mixins import LoginRequiredMixin

class Information(LoginRequiredMixin, DetailView):
    model = Storage
    template_name = 'base/storage_detail.html'
    
    def get_queryset(self):
        # 仅返回当前登录用户的Storage记录
        return Storage.objects.filter(user=self.request.user)

class UpdateInfo(LoginRequiredMixin, UpdateView):
    model = Storage
    fields = '__all__'
    success_url = reverse_lazy('list')
    
    def get_queryset(self):
        return Storage.objects.filter(user=self.request.user)

注:如果你的应用允许未登录用户访问记录,可暂时移除LoginRequiredMixin,但需注意数据安全。

4. 统一URL路径的斜杠格式

你的change-info/<int:pk>路径末尾未加斜杠,虽然Django默认的APPEND_SLASH设置会自动重定向,但为了和其他URL保持一致,建议补充斜杠:

# urls.py中修改change-info的路径
path('change-info/<int:pk>/', UpdateInfo.as_view(), name='change-info')

总结

优先确认数据库中是否存在对应PK的记录,这是解决该问题的核心。其次修复代码中的语法错误,并根据业务需求添加数据过滤逻辑,最后统一URL格式避免潜在问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 15:20:51