django q 对象条件匹配
Posted
技术标签:
【中文标题】django q 对象条件匹配【英文标题】:django q object condition matching 【发布时间】:2011-08-16 21:45:25 【问题描述】:我的问题是当我选择 datefrom 和 dateto 时它显示错误。“未找到关键‘性别’
现在即使我使用了 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 时仍然显示错误???如果 request.POST.has_key('gender') 仍然错误,即使我使用过,也没有选择男性或女性 我是 django 的新手.. 请帮助... 提前谢谢..
【问题讨论】:
【参考方案1】:当尝试对该字典中不存在的键进行字典查找时,会引发您报告的错误 - 几乎正是错误告诉您的内容。
由于我所要做的就是您发布的代码,我的猜测是,无论出于何种原因,“性别”实际上并没有出现在 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
【讨论】:
【参考方案2】:为此,一个表单将非常有用!
类似:
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)
【讨论】:
以上是关于django q 对象条件匹配的主要内容,如果未能解决你的问题,请参考以下文章