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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 08:51:03