условия проверки фильтра django - PullRequest
1 голос
/ 26 апреля 2011

здесь я использую

age_from:-------    age to:--------------    //here ---- is text field
date from:------     dat_to:-------------

search button // this is my search button.

здесь я сопоставляю условия, если при выборе возраста из него будет производиться поиск возраста, который больше на основе даты (даты от до даты_вто), аналогично для остальных случаев, какупомяните ниже код:

теперь моя проблема:

gender : o male o female
age_from:-------    age to:--------------
date from:------     dat_to:-------------

теперь, как я могу написать условие для половой части, возрастной части и части даты ... немного сбивает с толку, что я получаю точно... помогите мне ..

def search(request):

    age_from = request.POST["age_from"]
    age_to = request.POST["age_to"]
    date_from = request.POST["date_from"]
    date_to = request.POST["date_to"] 


    if age_from:
        age1 = 1
    if age_to:
        age2 = 1
    if date_from:
        date1 = 1
    if date_to:
        date2 = 1


    if age1 and not age2:
        if date1 and date2:
            patient = PatientInfo.objects.filter(age__gte=age_from , dateedit__range=(date_from,date_to))
        else:
            if date1:
                patient = PatientInfo.objects.filter(age__gte=age_from,dateedit__gte=date_from)
            else:
                if date2:
                    patient = PatientInfo.objects.filter(age__gte=age_from, dateedit__lte=date_to)
                else:
                    patient = PatientInfo.objects.filter(age__gte=age_from)

    if age2 and not age1:
        if date1 and date2:
            patient = PatientInfo.objects.filter(age__lte=age_to, dateedit__range=(date_from,date_to))
        else:
            if date1:
                patient = PatientInfo.objects.filter(age__lte=age_to, dateedit__gte=date_from)
            else:
                if date2:
                    patient = PatientInfo.objects.filter(age__lte=age_to, dateedit__lte=date_to)
                else:
                    patient = PatientInfo.objects.filter(age__lte=age_to)

    if age1 and age2:
        if date1 and date2:
            patient = PatientInfo.objects.filter(age__range=(age_from,age_to),dateedit__range=(date_from,date_to))
        else:
            if date1:
                patient = PatientInfo.objects.filter(age__range=(age_from,age_to),dateedit__gte=date_from)
            else:
                if date2:
                    patient = PatientInfo.objects.filter(age__range=(age_from,age_to),dateedit__lte=date_to)
                else:
                    patient = PatientInfo.objects.filter(age__range=(age_from,age_to))


    if date1 and not date2:
        if age1 and age2:
            patient = PatientInfo.objects.filter(dateedit__gte=date_from, age1__range=(age_from,age_to))
        else:
            if age1:
                patient = PatientInfo.objects.filter(dateedit__gte=date_from, age__gte=age_from)
            else:
                if age2:
                    patient = PatientInfo.objects.filter(dateedit__gte=date_from, age__lte=age_to)
                else:
                    patient = PatientInfo.objects.filter(dateedit__gte=date_from)

    if date2 and not date1:
        if age1 and age2:
            patient = PatientInfo.objects.filter(dateedit__lte=date_to, age1__range=(age_from,age_to))
        else:
            if age1:
                patient = PatientInfo.objects.filter(dateedit__lte=date_to, age__gte=age_from)
            else:
                if age2:
                    patient = PatientInfo.objects.filter(dateedit__lte=date_to, age__lte=age_to)
                else:
                    patient = PatientInfo.objects.filter(dateedit__lte=date_to)

    if date1 and date2:
        if age1 and age2:
            patient = PatientInfo.objects.filter(dateedit__range=(date_from,date_to), age1__range=(age_from,age_to))
        else:
            if age1:
                patient = PatientInfo.objects.filter(dateedit__range=(date_from,date_to),age__gte=age_from)
            else:
                if age2:
                    patient = PatientInfo.objects.filter(dateedit__range=(date_from,date_to), age__lte=age_to)
                else:
                    patient = PatientInfo.objects.filter(dateedit__range=(date_from,date_to))

приведенный выше код для части возраста и даты ... работает отлично .... но когда приходит три условия, это сбивает с толку .. не получается

пожалуйста, напишите код для пола, возраста и даты .. как указано выше, спасибо заранее ...

1 Ответ

3 голосов
/ 26 апреля 2011

Я предлагаю вам добавлять условия фильтра по мере необходимости, а не пытаться раскошелиться на ваш код, как вы. Вот пример, как вы можете это сделать:

patient = PatientInfo.objects.all(); # getting all patients (don't worry, query is not executed yet)

if age_from:
    patient = patient.filter(age__gte=age_from)

if age_to:
    patient = patient.filter(dateedit__lte=date_to)

if gender:
    patient = patient.filter(gender=gender)

# ...and so on

Условия будут добавляться друг к другу, и фактический запрос будет выполнен, когда вы попытаетесь дать ссылку на результат. Разве Джанго не крут?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...