Django-фильтры сбрасываются после использования UpdateView
У меня есть модель с большим количеством записей, поэтому я использую django-filters для фильтрации модели, я первоначально загружаю пустую таблицу и оттуда использую фильтр для просмотра элементов.
Все работает нормально, страница загружается изначально без записей, после фильтрации django показывает правильные элементы.
Url получает параметр: /retetabloc/?acordcadru=532
(532 - это фильтр), но когда я пытаюсь обновить запись, фильтр сбрасывается (параметр все еще в URL) и загружается вся база данных.
Я не совсем понимаю, как передать параметр фильтра в RetetaBlocUpdate
, чтобы после обновления вернуться к отфильтрованным элементам, как в ListView.
views.py
class RetetaBlocListview(LoginRequiredMixin, CoreListView):
model = RetetaBloc
def get_queryset(self, *args, **kwargs):
pdb.set_trace()
acordcadru = self.request.GET.get("acordcadru")
queryset = RetetaBloc.objects.filter(acordcadru=acordcadru)
return queryset
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['filter'] = RetetaBlocFilter(self.request.GET, queryset=self.get_queryset())
pdb.set_trace()
return context
class RetetaBlocUpdate(LoginRequiredMixin, AjaxUpdateView):
model = RetetaBloc
form_class = RetetaBlocForm
Спасибо.
Если вы хотите, чтобы фильтры запоминались, вы можете добавить их в переменную сессии. Таким образом, фильтры будут вспоминаться, даже если они не возвращаются непосредственно со страницы обновления (и у вас не будет лишних URL запросов на страницах, где они не нужны). Что-то вроде:
def get_queryset(self, *args, **kwargs):
pdb.set_trace()
#check for new filter in URL first
acordcadru = self.request.GET.get("acordcadru")
#if nothing check for session variable
if not acordcadru:
acordccadru = self.request.session.get('acrodcadru')
#if something in URL querystring, set it in session variable
else:
self.request.session['acordcadru'] = acordcadru
queryset = RetetaBloc.objects.filter(acordcadru=acordcadru)
return queryset