Функциональность 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)
  1. У вас проблема с отступами в коде, который вы разместили.

  2. Вам нужно добавить action и method в вашу форму.

     <form action="/url_of_search/" method="post">
    
  3. Пропущена кавычка в строке input.

     <input type='text' placeholder='search houses'>
    
  4. Вы должны использовать query вместо 'query' в фильтре.

    Product.objects.filter(name__contains=query)
    

Отсутствие чего-либо в html-коде:

  1. атрибут действия формы
  2. атрибут метода формы
  3. атрибут имени поля ввода
<!-- 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)
Вернуться на верх