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

