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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 13:03:16