ошибка django MultiValueDictKeyError при запросе get объекта

#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 для возврата отфильтрованного набора запросов, как описано здесь, динамическая фильтрация