我正在使用此查询进行搜索。我想根据status
,start_date
和end_date
status
可以是Active,Inactive或AllStatus。
start_date
可以是日期或无(可以为空)
end_date
可以是日期或无(可以为空)
status = form.cleaned_data['status']
start_date = form.cleaned_data['start_date']
end_date = form.cleaned_data['end_date']
我在下面的查询中进行了此查询,但它给我错误-Cannot use None as a query value
。
有谁能告诉我问题出在哪里,我该如何使用status
,start_date
和end_date
进行查询,有时其值为None
Jobs.objects.filter(
Q(job_company=self.request.user.userprofile.user_company) |
Q(job_created_on__range=[start_date, end_date]) |
Q(job_created_on__gt=start_date) |
Q(job_created_on__lt=end_date) |
Q(job_status=status)
)
答案 0 :(得分:1)
您可以动态构建查找:
status = form.cleaned_data['status']
start_date = form.cleaned_data['start_date']
end_date = form.cleaned_data['end_date']
company = self.request.user.userprofile.user_company
lookups = (Q(job_company=company) | Q(job_status=status)
if start_date:
lookups = lookups | Q(job_created_on__gt=start_date)
if end_date:
lookups = lookups | Q(job_created_on__lt=end_date)
Jobs.objects.filter(lookups)
不需要job_created_on__range
查找。
还要检查您是否真的想要job_created_on__gt/__lt
或job_created_on__gte/__lte
。