簡體   English   中英

使用 UpdateView 后 Django-filters 重置

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM