Django关联Requests与RegUsers表查询报错,请求修正代码语法
问题分析与代码修正
原代码存在以下核心问题:
- 未筛选出与当前用户
uid相关的审批通过请求,而是取了所有status="Aprv"的请求,逻辑完全偏离需求 - 使用
value()仅能获取QuerySet中第一个对象的字段值,无法处理多条好友记录的场景 - 未考虑
uid匹配请求中任一ID的边界逻辑严谨性
修正后的代码如下:
class frnds(APIView): def post(self, request): uid = request.data.get('uid') # 用get避免参数缺失抛异常 if not uid: return Response({"error": "uid参数缺失"}, status=400) # 筛选和当前用户相关且已审批的请求 approved_requests = Requests.objects.filter( status="Aprv", Q(from_id=uid) | Q(to_id=uid) # Q对象实现或条件查询 ) # 收集所有好友ID friend_ids = [] for req in approved_requests: friend_ids.append(req.to_id if req.from_id == uid else req.from_id) # 批量查询好友信息并去重 obj = RegUsers.objects.filter(u_id__in=friend_ids).distinct() ser = android_serialiser(obj, many=True) return Response(ser.data)
额外优化点:
- 新增参数校验,缺失
uid时返回明确错误提示 - 使用
Q对象实现复杂条件查询,精准定位目标请求 - 批量查询好友信息,减少数据库交互次数提升性能
- 用
distinct()避免重复的好友记录
内容的提问来源于stack exchange,提问作者akash
相关产品推荐
相关产品推荐

