Django:多参数的ORM动态查询

前端页面有几个输入框用于搜索数据。用户可以按需填入搜索条件传给后台,后台再按条件查询返回。

查找资料发现orm查询中可以有filter(**dict)这种查询方式,所以有以下查询。

def search_stu_info(request):
    argument = _getArguments(request)
    try:
        name = argument.get("name", "")
        class_id = argument.get("class_id", "")
        sno = argument.get("sno", "")
        kwargs = {}
        if name:
            kwargs["name__contains"] = name
        if class_id:
            kwargs["class_id"] = class_id
        if sno:
            kwargs["son"] = sno
        stu = Student.objects.filter(**kwargs)
        data = []
        for i in stu:
            data.append(model_to_dict[i])
        returnDict = {
            'count': len(data),  # 总数据量
            'data': json.dumps(data),  # 显示的数据
            'state': 200,
            'msg': "success"
        }
        return JsonResponse(returnDict, json_dumps_params={'ensure_ascii': False})
    except Exception as e:
        traceback.print_exc()
        return JsonResponse({"state": 500, "msg": "系统出错,请联系管理员", "errMsg": str(e)},json_dumps_params={'ensure_ascii': False})


def _getArguments(request):
    # 获取请求参数
    if request.method == 'GET':
        logging.error("收到GET请求")
        arguments = dict(request.GET)
        for arg in arguments:
            if type(arguments[arg]) == type([]):
                arguments[arg] = arguments[arg][0]
    else:
        logging.error("收到POST请求")
        logging.error("post-body")
        logging.error(request.body.decode())
        if "form" in request.content_type:
            arguments = request.POST
        else:
            arguments = json.loads(request.body.decode())
    return arguments

猜你喜欢

转载自blog.csdn.net/weixin_38676276/article/details/107991407
今日推荐