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

Django中OrderItem.objects.filter异常:莫名添加id查询条件

问题原因

你遇到的SQL自动添加id=2条件的问题,核心原因是视图类的默认逻辑冲突:如果你的视图继承了RetrieveAPIView(或其他用于获取单个对象的视图类),这类视图会自动根据URL中的pk参数,对OrderItem的主键id进行过滤,再叠加你手动添加的order_id=self.kwargs['pk'],就导致两个过滤条件同时生效。

解决方案

1. 更换视图类为ListAPIView

因为你需要获取某个Order下的所有OrderItem列表,应让视图继承ListAPIView(用于返回列表数据的视图类),它不会自动添加主键过滤条件。示例代码:

from rest_framework.generics import ListAPIView

class OrderItemListView(ListAPIView):
    serializer_class = OrderItemSerializer

    def get_queryset(self, *args, **kwargs):
        return OrderItem.objects.filter(order_id=self.kwargs['pk'])

2. 确认路由配置

确保路由指向列表视图,而非详情视图。在urls.py中配置示例:

path('orders/<int:pk>/items/', OrderItemListView.as_view(), name='order-items'),

这里的pk对应Order的id,用于筛选该Order关联的所有OrderItem。

额外注意事项
  • OrderItem模型中外键的on_delete参数存在笔误:models.CASCADEAlso应改为models.CASCADE,否则会触发语法错误。
  • OrderAddSerializer的元类里medel是拼写错误,需改为model。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 12:37:21