如何使用Q在django DRF中搜索列表中的字段而不使用QuerySet

如何使用Q在django DRF中搜索列表中的字段而不使用QuerySet,django,python-3.x,search,django-rest-framework,filtering,Django,Python 3.x,Search,Django Rest Framework,Filtering,在这里,我得到了一个错误AttributeError:“list”对象没有属性“filter”目前我从您的查询中了解到的是,如果有first\u name请求值,那么您可以使用role\u id=user\u role['employer']和first\u name=first\u name搜索用户,如果有姓氏请求,则除了仅按姓氏过滤外,其余都是相同的 first_name = request.GET.get('first_name') last_name = request.GET.get(

在这里,我得到了一个错误AttributeError:“list”对象没有属性“filter”

目前我从您的查询中了解到的是,如果有
first\u name
请求值,那么您可以使用role\u id=user\u role['employer']和first\u name=first\u name搜索用户,如果有姓氏请求,则除了仅按姓氏过滤外,其余都是相同的

first_name = request.GET.get('first_name')
last_name = request.GET.get('last_name')

if first_name:
   user_obj = User.objects.filter(role_id=USER_ROLE['employer'], first_name=first_name)
if last_name:
   user_obj = User.objects.filter(role_id=USER_ROLE['employer'], last_name=last_name)
查询中不需要或条件的:

def list(self, request):
    """"

    """
    query = [Q(role_id=USER_ROLE['employer'])]
    first_name = [Q(request.GET.get('first_name')), Q.AND]
    last_name = [Q(request.GET.get('last_name')), Q.AND]
    if first_name:
        query = query.filter(first_name=first_name)
    if last_name:
        query = query.filter(last_name=last_name)

    user_obj = User.objects.filter(query)
    serializer_data = self.serializer_class(user_obj, many=True).data
    return custom_response(status=status.HTTP_200_OK, detail=SUCCESS_CODE['3007'], data=serializer_data)

如果我错了,请纠正我这里过滤
雇主的逻辑,如果reaquest有
名字
按它过滤,如果它有
姓氏
。因此,如果这里既有
名字
又有'last\u name',它也可以工作

first_name = request.GET.get('first_name')
last_name = request.GET.get('last_name')

if first_name:
   user_obj = User.objects.filter(role_id=USER_ROLE['employer'], first_name=first_name)
if last_name:
   user_obj = User.objects.filter(role_id=USER_ROLE['employer'], last_name=last_name)

请使用我建议的@RobinChauhan新应用逻辑更新您的问题