У меня есть это соединение:Django QuerySet API: Как я могу присоединиться к iexact и значкам?
lawyers = Lawyer.objects.filter(last__iexact=last_name).filter(first__icontains=first_name)
Если вы попробуете Фамилия: Abbas и Имя: Амр он говорит вам, что амр аббас имеет 1 одноклассниц.
Но если вы попробуете Имя только в нем говорится, что в базе данных, называемой amr, нет адвокатов (очевидно, есть).
Если я меняю (last__iexact=last_name)
на (last__icontains=last_name)
, то остальное Фамилия бланков прекрасна и amr.
Но с last__icontains=last_name
, если вы ищете «collin», вы также получаете «collins» и «collingwood», что не то, что я хочу.
Вы знаете, как я могу использовать iexact
, а также игнорировать его, если он пуст?
Благодаря
Это функция просмотра:
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']
lawyers = Lawyer.objects.filter(last__iexact=last_name).filter(first__icontains=first_name)
if len(lawyers)==0:
form = SearchForm()
return render_to_response('not_in_database.html', {'last': last_name, 'first': first_name, 'form': form})
if len(lawyers)>1:
form = SearchForm(initial={'last_name': last_name})
return render_to_response('more_than_1_match.html', {'lawyers': lawyers, 'last': last_name, 'first': first_name, 'form': form})
q_school = Lawyer.objects.filter(last__icontains=last_name).filter(first__icontains=first_name).values_list('school', flat=True)
q_year = Lawyer.objects.filter(last__icontains=last_name).filter(first__icontains=first_name).values_list('year_graduated', flat=True)
lawyers1 = Lawyer.objects.filter(school__iexact=q_school[0]).filter(year_graduated__icontains=q_year[0]).exclude(last__icontains=last_name)
form = SearchForm()
return render_to_response('search_results.html', {'lawyers': lawyers1, 'last': last_name, 'first': first_name, 'form': form})
else:
form = SearchForm()
return render_to_response('search_form.html', {'form': form, })
Отлично! Спасибо. Я исправил первую часть, и теперь она работает. Я посмотрю на другого позже. У меня будет также шаблонный вопрос. Еще раз спасибо. – Zeynel