Django self.request.POST.get() не возвращает ничего

#django #post #django-class-based-views

Вопрос:

Я пытаюсь создать кнопку поиска для своей базы данных. Но мой self.request.POST.get («поиск») не возвращает ничего

форма:

 <form class="d-flex" action="{% url 'asset_app_search' %}">{% csrf_token %}
        <input class="form-control me-2" type="search" placeholder="Søg" aria-label="Search" name="searched">
        <button class="btn btn-outline-secondary" type="submit">Søg</button> -
      </form>
 

мой views.py

 class SearchView(generic.TemplateView):
    template_name = "asset_app/search.html"

    def post(self):
        searched = self.request.POST.get('searched')

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        searched = self.post()
        context['searched'] = searched
        context_entry_today = datetime.date.today()
        context_entry_overdue = datetime.date.today() - datetime.timedelta(days=90)
        context_entry_inspection_time = datetime.date.today() - datetime.timedelta(days=76)
        context['assets'] = models.Asset.objects.order_by('name')
        context['rooms'] = models.Room.objects.order_by('last_inspected', 'location', 'name')
        context['bundelReservations'] = models.Bundle_reservation.objects.order_by('return_date')
        context['loan_assets'] = models.Loan_asset.objects.order_by('return_date')
        context['to_dos'] = to_do_list_app.models.Jobs.objects.all()
        context['today'] = context_entry_today
        context['overdue'] = context_entry_overdue
        context['inspection_time'] = context_entry_inspection_time
        return context
 

и что публикуется

 [11/Jun/2021 22:55:23] "GET /asset/search/?csrfmiddlewaretoken=fqb8jppygSbZ10ET8AXw6dd5B77z5OYudNJU0uyjp8jFNYDG57nkNvrcx5lHFsPoamp;searched=sdfdsff HTTP/1.1" 200 10418
 

Ответ №1:

Вы должны разрешить форме сделать запрос на публикацию, с:

 <form method="post" class="d-flex" action="{% url 'asset_app_search' %}">{% csrf_token %}
    …
</form> 

Таким образом, вы указываете method="post" в <form> теге.

По вашему мнению, ваш post метод в конечном итоге должен будет вернуть HttpResponse объект:

 class SearchView(generic.TemplateView):
    template_name = "asset_app/search.html"

    def post(self):
        searched = self.request.POST.get('searched')
        # …
        return HttpResponse('some message')