条件Django查询

时间:2019-01-17 12:18:01

标签: django django-models django-forms django-templates django-views

我正在使用此查询进行搜索。我想根据statusstart_dateend_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

有谁能告诉我问题出在哪里,我该如何使用statusstart_dateend_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)
)

1 个答案:

答案 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/__ltjob_created_on__gte/__lte