django q соответствие условий объекта - PullRequest
0 голосов
/ 02 мая 2011

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

теперь даже если я использовал объект Q, проблема та же, что и раньше ..

search_gender = request.POST["gender"]
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 date_from:
    date_from = datetime.strptime(request.POST["date_from"],"%d %B %Y")

if date_to:
    date_to = datetime.strptime(request.POST["date_to"],"%d %B %Y")

patient = PatientInfo()

p_male = 0
p_female = 0
age1 = 0
age2 = 0
date1 = 0
date2 = 0

if search_gender == 'male' :
    p_male = 1
if search_gender == 'female' :
    p_female = 1

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

if date1 and date2:
    patient = PatientInfo.objects.filter(
            Q(dateedit__range = (date_from,date_to))
            )

все еще показывает ошибку, когда я выбираю date_from и date_to оба ??? даже не получаю точно, я не выбираю ни мужчину, ни женщину, даже если использовал и я новичок в Django .. пожалуйста, помогите ... спасибо заранее ..

Ответы [ 2 ]

0 голосов
/ 03 мая 2011

Для этого форма будет очень полезна!

Что-то вроде:

forms.py

from django import forms

class MyForm(forms.Form):
    GENDERS = (
        ('m','Male'),
        ('f', 'Female')
    )
    gender    = forms.CharField(choices=GENDERS, required=False)
    age_from  = forms.IntegerField()
    age_to    = forms.IntegerField()
    date_from = request.POST["date_from"]
    date_to   = forms.DateTimeField()


    def clean_gender(self):
        gender = self.cleanded_data.get('gender', 'm')

        #do something with gender

        return gender#now it has always a value

views.py:

def myform(request):

if request.method == "POST":
    form = MyForm(request.POST)

    if form.is_valid():
        gender = form.cleaned_data.get('gender')

        #do something with data...


else:
    form = MyForm()

return render_to_response('template.html', {'form':from})
0 голосов
/ 02 мая 2011

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

Поскольку все, что мне нужно, - это опубликованный вами код, я думаю, что по какой-то причине слово "пол" на самом деле отсутствует в словаре request.POST. Вам нужно выяснить, почему.

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

# Check for dictionary key
if request.POST.has_key('gender'):
    gender = request.POST['gender']

# or Provide fallback
gender = request.POST.get('gender', 'male') # if gender isn't present, 'male' will be returned
...