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

Django中访问/product/brand路径触发Products.DoesNotExist错误求助

Django Products.DoesNotExist 错误排查修复

问题现象

访问 /product/<productid> 路径功能正常,但访问 /product/<brand> 时触发错误:product.models.Products.DoesNotExist: Products matching query does not exist

错误原因

  1. URL 匹配顺序冲突:Django 按 URL 定义顺序匹配路由,product/<str:productid>/ 和 product/<str:brand>/ 均为字符串路径,访问品牌路径时会优先匹配 productid 路由,导致把品牌名称当作产品 ID 查询,最终因无匹配记录抛出异常。
  2. Getproduct 视图方法不规范:该类继承 APIView 但未实现标准的 get 方法,自定义的 get_object 无法被 Django 正确调用;同时使用 Products.objects.get(brand=brand) 查询,无匹配记录时直接抛出异常,未做异常处理。
  3. 业务逻辑适配问题:一个品牌通常对应多个产品,用 get() 仅能返回单条记录,不符合实际业务场景。

修复方案

1. 调整 URL 路由结构

给品牌查询路径添加明确前缀,避免模糊匹配冲突,修改后的 urls.py:

from django.urls import path
from.views import GetListProduct, Topsellsviews, Getdetailproduct, Getproduct

urlpatterns = [
    path('product/', GetListProduct.as_view()),
    path('topsells/', Topsellsviews.as_view()),
    path('product/<str:productid>/', Getdetailproduct.as_view()),
    path('product/brand/<str:brand>/', Getproduct.as_view()),  # 新增brand前缀区分路由
]

2. 修复 Getproduct 视图类

实现标准 get 方法,处理异常并支持多产品序列化:

from rest_framework import status

class Getproduct(APIView):
    def get(self, request, brand):
        # 查询该品牌下所有产品,避免单条查询的异常
        products = Products.objects.filter(brand=brand)
        if not products.exists():
            return Response({"error": "该品牌下无产品"}, status=status.HTTP_404_NOT_FOUND)
        serializer = ProductSerializer(products, many=True)
        return Response(serializer.data)

可选优化:给产品详情查询添加异常处理

避免直接抛出异常,返回友好提示:

from rest_framework import status

class Getdetailproduct(APIView):
    def get(self, request, productid):
        try:
            detail = Products.objects.get(productid=productid)
        except Products.DoesNotExist:
            return Response({"error": "产品不存在"}, status=status.HTTP_404_NOT_FOUND)
        serializer = ProductSerializer(detail)
        return Response(serializer.data)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 10:25:26