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

在DRF中用QuerySet过滤当前用户产品返回空数组,求错误原因

问题排查与解决

可能的错误点及修复方案

1. 未验证用户身份,request.user为匿名用户

如果接口未配置用户认证逻辑,self.request.user会是匿名用户,此时user.id为None,而你的Product模型中user字段默认值是1,自然过滤不到匹配的数据。

修复:给视图添加认证权限类,确保只有登录用户能访问接口:

from rest_framework.permissions import IsAuthenticated

class ProductCreateList(generics.ListCreateAPIView):
    serializer_class = ProductSerializer
    permission_classes = [IsAuthenticated]  # 添加用户认证要求

    def get_queryset(self):
        return Product.objects.filter(user=self.request.user)

2. 过滤条件写法冗余(不规范)

你当前用user=user.id做过滤条件,其实ForeignKey字段可以直接接收用户对象,改成user=self.request.user更简洁,同时避免不必要的ID取值操作。

3. 现有产品的user关联值与当前登录用户不匹配

检查数据库中已有的Product数据,其user字段是否关联的是当前登录用户的ID。如果测试数据都是默认值1,而当前登录用户ID不是1,接口自然返回空数组。

可通过Django Shell验证数据:

# 进入Django Shell
python manage.py shell

# 查看所有产品的user_id
from your_app.models import Product
for p in Product.objects.all():
    print(p.user_id)

# 查看当前测试用户的ID
from accounts.models import Account
print(Account.objects.get(username='你的测试用户名').id)

内容的提问来源于stack exchange,提问作者Teshie Ethiopia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 09:40:43