Функциональность Django Search: форма возвращает None
я пытаюсь создать функциональность поиска на django для моего приложения, но форма ввода продолжает возвращать none
views.py
def search(request):
if request.method == 'POST':
query = request.POST.get('text')
houses = Product.objects.filter(name__contains='query')
context = {
'houses':houses,
}
return render (request, 'searchresult.html',context )
search.html
<form>
<input type='text' placeholder='search houses>
<button type='submit'>Search</button>
</form>
Во-первых, ваш отступ в python неверен, и ваш HTML также неверен в строке input
. Я предположу, что это опечатка в вопросе, но если нет, то у вас есть проблемы.
Ваша основная проблема - фильтр для домов:
houses = Product.objects.filter(name__contains='query')
ищет имя, содержащее строку "query". Вам нужна переменная, которую вы только что определили.
houses = Product.objects.filter(name__contains=query)
У вас проблема с отступами в коде, который вы разместили.
Вам нужно добавить
action
иmethod
в вашу форму.<form action="/url_of_search/" method="post">
Пропущена кавычка в строке
input
.<input type='text' placeholder='search houses'>
Вы должны использовать
query
вместо'query'
в фильтре.Product.objects.filter(name__contains=query)
Отсутствие чего-либо в html-коде:
- атрибут действия формы
- атрибут метода формы
- атрибут имени поля ввода
<!-- add form attributes method and action -->
<form method="POST" action="{% url '<url_name>' %}">
<!-- add input attribute name to identify the field and pass the value in request body -->
<input type='text' placeholder='search houses' name='search_text'>
<button type='submit'>Search</button>
</form>
обновление представлений для поиска
def search(request):
if request.method == 'POST':
# use input field name to get the search text
query = request.POST.get('search_text')
houses = Product.objects.filter(name__contains=query)
context = {
'houses':houses,
}
return render (request, 'searchresult.html', context)