#django #forms #request
#django #формы #запрос
Вопрос:
Я создал форму для фильтрации ListView
class SingleNewsView(ListView):
model = News
form_class = SearchForm
template_name = "single_news.html"
def get(self, request, pk, **kwargs):
self.pk = pk
pub_from = request.GET['pub_date_from']
pub_to = request.GET['pub_date_to']
return super(SingleNewsView,self).get(request,pk, **kwargs)
Моими полями формы являются pub_date_from
и pub_date_to
. Когда я запускаю сайт, он говорит:
MultiValueDictKeyError
.
Я не знаю, что происходит. Когда я удаляю две строки получения pub_from
, pub_to
сайт работает нормально. Я хочу, чтобы эти два значения фильтровали набор запросов.
Комментарии:
1. Вы отправляете форму с
GET
помощью метода? Возможно, вы захотите попробоватьrequest.POST
.2. да, я отправляю с помощью GET. Сообщение не сработало. После удаления pub_date_from один раз и запуска сайта и повторного ввода он работает. Но, начиная с самого начала, не работает. 🙁
Ответ №1:
При первом запросе данные формы не представлены, поэтому не будет никаких request.GET
данных. Это request.GET['pub_date_from']
приведет к сбою. Вы должны использовать .get()
метод
pub_from = request.GET.get('pub_date_from')
pub_to = request.GET.get('pub_date_to')
Если эти ключи отсутствуют в dict, вернутся None
. Поэтому обрабатывайте такие случаи соответствующим образом в своем коде.
Кроме того, если вы хотите отфильтровать объекты для ListView
get_queryset()
метода add для возврата отфильтрованного набора запросов, как описано здесь, динамическая фильтрация