Django使用查询更新数据时出现404 not found错误该如何解决?
问题根因
你重复触发了对象查询逻辑:
self.get_object()内部会自动调用filter_queryset过滤查询集,首次调用时当前用户还未被加入seen_by_user关联关系,因此可以正常拿到ID为1的记录- 你给对象添加完已读标记后,调用了
super().get(request, *args, **kwargs),而DRF的RetrieveAPIView自带的get方法内部会再次执行get_object()逻辑,此时关联关系已经更新,filter_queryset会将这条记录排除,自然查询不到对应记录,返回404。
修复方案
无需调用父类的get方法,直接将修改后的对象序列化返回即可,修改后的retrieve方法如下:
def retrieve(self, request, *args, **kwargs): obj = self.get_object() obj.seen_by_user.add(self.request.user) # 手动序列化对象返回,避免重复执行查询逻辑 serializer = self.get_serializer(obj) return Response(serializer.data)
可选优化建议
该操作属于数据修改行为,使用GET请求不符合REST规范,建议改为POST或PATCH请求,避免缓存、浏览器预请求等场景意外触发已读标记更新。
内容的提问来源于stack exchange,提问作者Vin
相关产品推荐
相关产品推荐

