【发布时间】:2010-01-14 15:57:13
【问题描述】:
当查询在数据库中时,此视图有效。
def search(request):
if 'q' in request.GET and request.GET['q']:
q = request.GET['q']
q_school = Lawyer.objects.filter(last__icontains=q).values_list('school', flat=True)
q_year = Lawyer.objects.filter(last__icontains=q).values_list('year_graduated', flat=True)
lawyers = Lawyer.objects.filter(school__icontains=q_school[0]).filter(year_graduated__icontains=q_year[0]).exclude(last__icontains=q)
return render_to_response('search_results.html', {'lawyers': lawyers, 'query': q})
else:
return HttpResponse('Please submit a search term.')
所以,如果q=delelle,那么它会在数据库中找到同年从同一所学校毕业的其他律师。
如果 q=collins 和 collins 在数据库中,但没有其他同年从同一所学校毕业的律师,则它会给出相应的错误消息“没有律师符合您的搜索条件。”
但是如果q=moritz 并且数据库中没有名为moritz 的律师,那么它会给出500 内部服务器错误。
我不明白request.GET['q'] 表示法或如何解决这个问题,以便在查询不在数据库中时添加正确的文本。你能指出我正确的方向吗?谢谢。
编辑安东尼哈奇金斯的答案
以下代码可以正常工作而不会出现错误。我会尽快合并其余的:
def search(request):
if 'q' in request.GET and request.GET['q']:
q = request.GET['q']
lawyer = Lawyer.objects.filter(last__icontains=q)
if len(lawyer)==0:
return render_to_response('not_in_database.html', {'query': q})
else:
q_school = Lawyer.objects.filter(last__icontains=q).values_list('school', flat=True)
q_year = Lawyer.objects.filter(last__icontains=q).values_list('year_graduated', flat=True)
lawyers = Lawyer.objects.filter(school__icontains=q_school[0]).filter(year_graduated__icontains=q_year[0]).exclude(last__icontains=q)
return render_to_response('search_results.html', {'lawyers': lawyers, 'query': q})
else:
return HttpResponse('Please submit a search term.')
【问题讨论】:
标签: django django-forms