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

Django DRF实现用户专属收藏帖页面时过滤返回空列表求助

Django DRF收藏帖过滤返回空列表问题排查与解决

核心排查步骤

  • 确认Profile与User的关联关系
    先检查你的Profile模型是否和Django内置User正确建立一对一关联,示例如下:

    class Profile(models.Model):
        user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='profile')
        # 其他自定义字段
    

    同时直接核对后台SavedPost记录中的profile字段,确认其关联的Profile实例确实属于当前登录用户——也可以直接查数据库,对比SavedPost表的profile_id和当前用户Profile的id是否一致。

  • 调试认证状态与用户关联
    在视图的get_queryset方法中添加调试打印,明确当前请求的用户状态:

    def get_queryset(self):
        print("当前登录用户:", self.request.user)
        print("用户关联的Profile:", getattr(self.request.user, 'profile', None))
        return SavedPost.objects.filter(profile=self.request.user.profile)
    

    发起请求后查看控制台输出:

    • 如果self.request.user是匿名用户,说明Token认证未生效,检查请求头是否正确携带Authorization: Token <你的认证令牌>
    • 如果self.request.user.profile为None或抛出异常,说明当前用户未创建对应的Profile实例,需要补全关联(可通过Django信号自动创建,或手动在后台添加)
  • 规范视图的QuerySet配置
    虽然get_queryset会覆盖类级别的queryset属性,但为避免混淆,建议将类中的queryset = SavedPost.objects.all()修改为:

    queryset = SavedPost.objects.none()
    

    明确表示数据源由get_queryset方法提供。

内容的提问来源于stack exchange,提问作者aamir kanhoush

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 10:17:12