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
相关产品推荐
相关产品推荐

