запрос django не совпадает - PullRequest
0 голосов
/ 05 мая 2011

мой запрос не работает должным образом. когда я выбираю мужскую часть, а затем age_from до age_to и date_from до date_to, он фактически не выбирает мужчину из моей базы данных в соответствии с моим запросом. Фактически в соответствии с моей мужской записью в возрасте от 5 до 15 лет и датой 2011-04-05 2011-05-05 только 1, но показывает 3 записи.

это мой запрос: Patient = PatientInfo.objects.filter (dateedit__range = (date_from, date_to), age__range = (age_from, age_to), пол__iexact = 'мужской')

Я думаю, что в моем запросе что-то не так ... Я не понимаю, точно ...

flag = 0 if request.POST.has_key ('пол'): search_gender = request.POST ["пол"]

    if search_gender == 'male':
        flag == 1

    if search_gender == 'female':
        flag == 2

    if search_gender == 'both':
        flag == 3

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

пациент = PatientInfo ()

if date1 and date2:
    if age1 and age2:
             if flag == 1:
                 patient = PatientInfo.objects.filter(dateedit__range=(date_from,date_to),age__range=(age_from,age_to),gender__iexact='male')
             else:
                  patient = PatientInfo.objects.filter(dateedit__range=(date_from,date_to),age__range=(age_from,age_to))
                  if flag == 2:
                      patient = PatientInfo.objects.filter(dateedit__range=(date_from,date_to),age__range=(age_from,age_to),gender__iexact='female')
                  else:
                      patient = PatientInfo.objects.filter(dateedit__range=(date_from,date_to),age__range=(age_from,age_to))
                      if flag == 3:
                          patient = PatientInfo.objects.filter(dateedit__range=(date_from,date_to),age__range=(age_from,age_to),gender__iexact='male')

1 Ответ

1 голос
/ 05 мая 2011

Вы можете строить запросы постепенно, добавляя дополнительные фильтры по мере продвижения.Это приведёт в порядок вашу логику.Также elif ваш друг.Кроме того, в следующий раз используйте CHOICES для таких значений, как пол.

Я не проверял это, но вам нужен такой синтаксис

query = PatientInfo.objects.all()

if date1 and date2:
    query = query.filter(dateedit__range=(date_from,date_to))

if flag == 1:
    query = query.filter(gender__iexact='male')
elif flag == 2:
    query = query.filter(gender__iexact='female')

Затем используйте query как обычно,Поймите, что объекты запросов отличаются от наборов результатов.Когда вы добавляете что-то в свой запрос, вы меняете только дерево выражения запроса, которое будет превращено в SQL.Только когда вы выполняете его (превращаете его в список, выполняете итерации и т. Д.), Он запрашивает базу данных и превращается в набор результатов.Так что не бойтесь реорганизовать логику, чтобы вносить изменения в объект запроса.

Также помните, что вы сравниваете строку с int.Если вы хотите получить целочисленное значение, вам нужно thing = int(request.POST['thing']).

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