Django - Как этот UpdateView может вернуться к фильтрованному TableView?
У меня есть проект Django, в котором есть TableView с фильтрами на нем. Он может перенаправлять на UpdateViews и DeleteViews из строк таблицы, и это работает нормально, и UpdateView правильно перенаправляет на TableView при успехе.
Моя проблема в том, что я не могу сделать UpdateView перенаправленным на TableView, сохраняя фильтры, которые были у TableView, когда был вызван UpdateView.
В UpdateView есть такой get_context_data
метод, в котором я могу отправить отфильтрованный URL:
def get_context_data(self, **kwargs):
context = super(SaleUpdateView, self).get_context_data(**kwargs)
...
context['referrer'] = self.request.META.get('HTTP_REFERER')
return context
Я сделал кнопку в шаблоне HTML для перенаправления на этого реферера, который должен перенаправлять на фильтрованный TableView, но он перенаправляет меня на нефильтрованный TableView. Я думаю, что это связано с моим методом form_valid
и методом get_success_url
:
def form_valid(self, form):
...
return HttpResponseRedirect(self.get_success_url())
def get_success_url(self, form):
...
return reverse_lazy('sale_list')
Как я могу получить доступ к данным self.request.META.get('HTTP_REFERER')
или referer
, которые я отправил в шаблон, в контексте метода get_success_url
?
Я представляю, что должны быть лучшие способы решения этой проблемы, но я решил проблему, сделав следующее:
1. Отправка referer
в шаблон UpdateView следующим образом:
def get_context_data(self, **kwargs):
context = super(SaleDeleteView, self).get_context_data(**kwargs)
context['referrer'] = self.request.META.get('HTTP_REFERER')
return context
2. Добавляем его в <form>
в скрытый ввод шаблона, как это:
<input name="referrer" id="id_referrer" type="hidden" value="{{ referrer }}">
3. Получение его в методе get_success_url
в моем UpdateView
def get_success_url(self):
referrer = self.request.POST['referrer']
if str(referrer) not in ['', 'None']:
return referrer
return reverse_lazy('sale_list')
Я добавил эту последнюю проверку на случай, если пользователь перезагрузит UpdateView, в этом случае referer
будет пустым.