Весь вид может использовать некоторую работу, чтобы немного упростить для себя. Вот несколько быстрых изменений (включая обсуждаемые в другом вопросе):
def search_form(request):
if request.method == 'POST':
search_form = SearchForm(request.POST)
if search_form.is_valid():
last_name = search_form.cleaned_data['last_name']
first_name = search_form.cleaned_data['first_name']
fields = {}
if last_name:
lawyers = fields['last__iexact'] = last_name
if first_name:
lawyers = fields['first__icontains'] = first_name
try:
searched_lawyer = Lawyer.objects.get(**fields)
except Lawyer.DoesNotExist:
form = SearchForm()
return render_to_response('not_in_database.html', {'last': last_name, 'first': first_name, 'form': form})
except Lawyer.MultipleObjectsReturned:
form = SearchForm(initial={'last_name': last_name})
# Note: this breaks the current multiple returns functionality, up to you...
return render_to_response('more_than_1_match.html', {'last': last_name, 'first': first_name, 'form': form})
q_school = searched_lawyer.school
q_year = searched_lawyer.year_graduated
classmates = Lawyer.objects.filter(school__iexact=q_school).filter(year_graduated__icontains=q_year).exclude(last__icontains=last_name)
form = SearchForm()
return render_to_response('search_results.html', {'classmates': classmates, 'searched_lawyer': searched_lawyer, 'form': form})
else:
form = SearchForm()
return render_to_response('search_form.html', {'form': form, })
Так что теперь вместо того, чтобы использовать «first» и «last» в вашем шаблоне, вы будете использовать «seek_lawyer.first» и т. Д. (Но это означает, что у вас будет доступ ко всем атрибутам этого юриста в вашем шаблон)