[英]Django-filters resets after using the UpdateView
我有一個包含很多條目的 Model,所以我使用 django-filters 來過濾 model,我最初加載一個空表,然后從那里我使用過濾器來查看項目。
一切正常,頁面最初加載時沒有條目,在我過濾后,django 顯示了正確的項目。 Url 獲取一個參數: /retetabloc/?acordcadru=532
(532 是過濾器)但是當我嘗試更新條目時,過濾器會重置(參數仍在 URL 中)並且加載整個數據庫。
我不太明白如何將過濾器參數傳遞給RetetaBlocUpdate
,以便在更新完成后它返回到像 ListView 中那樣的過濾項目。
視圖.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
謝謝你。
如果您希望記住過濾器,您可以將它們添加到 session 變量中。 這樣,即使過濾器沒有 go 直接從更新頁面返回,過濾器也會被召回(並且您不會在不需要它們的頁面上有多余的 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:
acordcadru = self.request.session.get('acordcadru')
#if something in URL querystring, set it in session variable
else:
self.request.session['acordcadru'] = acordcadru
queryset = RetetaBloc.objects.filter(acordcadru=acordcadru)
return queryset
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.