python - 在django中使用Q Expression时查询后没有搜索结果
问题描述
我有以下基于类的视图,我已经实现了自定义查询功能,但是当我尝试搜索时,我没有得到结果。我在数据库中有员工详细信息的可用数据,但没有结果。到目前为止,这就是我的 Q 过滤器的样子。
class PayslipSearch(ListAPIView):
# queryset = Payslip.obejcts.all()
serializer_class = PayslipDetailSerializer
filter_backends = [SearchFilter]
search_fields = ['employee__user__first_name',
'employee__user__last_name',
'basic_salary__salary_value',
# 'payment_mode',
# 'payslip_no',
# 'month_ending',
# 'deductions',
# 'allowances'
]
def get_queryset(self, *args, **kwargs):
queryset_list = Payslip.objects.all()
# call GETs get to get your values
query = self.request.GET.get("q")
print(query)
if query:
queryset_list = Payslip.objects.filter(
Q(employee__user__first_name__icontains=query) |
Q(employee__user__last_name__icontains=query) |
Q(basic_salary__salary_value__icontains=query)
# Q(payment_mode__icontains=query) |
# Q(payslip_no__icontains=query) |
# Q(month_ending__icontains=query) |
# Q(allowances__icontains=query) |
# Q(deductions__icontains=query)
).distinct()
return queryset_list
解决方案
我是如何实现搜索的:
class EmployeeSearch(APIView):
# custom dictionary
def get(self, request, format=None):
query = self.request.query_params["q"]
if query:
queryset_list = Employee.objects.filter(
Q(user__first_name__icontains=query)
).values(
'user__id', 'department', 'hr_number', 'salaries__salary_value',
'tax_id_number', 'job_group', 'job_group_id',
'identification_number',
'joining_date', 'payslips',
'user__last_name', 'user__first_name', 'user__email'
)
return Response(data=queryset_list, status=status.HTTP_200_OK)
推荐阅读
- angular - 如何正确地将 JSON-Object 映射到 Angular-Map
- pandas - 我的 Dataframe 包含 500 列,但我只想在新的 Dataframe 中挑选 27 列。我怎么做?
- python - 如何在不同的视图和模板之间拆分模型类的字段以获取不同形式的输入?
- javascript - 无法处理警报
- php - 使用逻辑和 html 分离从数据库中列出帖子
- python - 如何在 Popen 中将某些内容附加到正在运行的文件中?
- sql - TypeORM:所有权方面如何运作?
- cv2 - Gazebo 中的模型没有被 OpenCV 拾取
- powershell - PowerShell 从 API 下载并保存 wav 文件
- javascript - Javascript 加倍导出以更新数据库