Условный Django Query - PullRequest
       8

Условный Django Query

0 голосов
/ 17 января 2019

Я использую этот запрос для поиска. Я хочу найти список в соответствии с status, start_date и end_date

status может быть активным, неактивным или 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)
)

1 Ответ

0 голосов
/ 17 января 2019

Вы можете динамически создавать поиск:

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.

...