首页 > 解决方案 > 如果物理服务器的 id 在给定的参数中,我如何过滤它?

问题描述

如果物理服务器的 id 在给定的参数中,我如何过滤它?

class PhysicalServerListAPIView(ListAPIView):
    serializer_class = PhysicalServerListSerializer
    permission_classes = [IsSuperAdminOrObjEqualsSelf]
    pagination_class = CommonPagination
    def get_queryset(self):

        query_params = self.request.query_params

        qs = PhysicalServer.objects.filter(user=self.request.user)

        id_list = get_param_from_query_params(query_params, 'id_list')

        if id_list:
            qs = qs.filter(Q(id__in=id_list)) # I want to filter if the physicalserver id is in the `id_list`

        return qs

方法的代码:

def get_param_from_query_params(query_params, param):
    """
    :param query_params:
    :param param:
    :return:
    """
    param_temp = None

    try:
        mutable = query_params._mutable
        query_params._mutable = True

        param_list = query_params.pop(param)
        param_temp = param_list[0] if (isinstance(param_list, list) and len(param_list) > 0) else ''

        query_params._mutable = mutable
    except Exception as e:
        pass

    return param_temp

如果物理服务器的 id 在给定的参数中,我如何过滤它?


编辑-1

我在 url 表单中的 id_list 是:

id_list[]=24&id_list[]=25&id_list[]=27

标签: pythondjango

解决方案


get id_list 方法应该是:

id_list = query_params.getlist('id_list')

这就是答案。


推荐阅读