2013-04-25 66 views
2

我正在使用Django endles-pagination以無限滾動加載頁面。我也有一些過濾器根據標準過濾數據(例如,根據價格進行價格滑塊過濾)。現在,當頁面加載時,過濾器現在只從加載的頁面進行過濾,但我希望過濾它已加載或將要加載的所有頁面。有沒有辦法做到這一點(通過提出一些Ajax請求或什麼)?使用Django無盡分頁過濾器

對此的任何幫助將是偉大的。非常感謝。

回答

1

要篩選數據,您必須在請求篩選查詢的視圖中重新定義get_queryset()方法。

比如我請求當前的語言模板基於語言過濾博客日誌:

class Blog(AjaxListView): 
    context_object_name = "posts" 
    template_name = 'cgapp/blog.html' 
    page_template = 'cgapp/post_list.html' 

def get_queryset(self): 
    if self.request.LANGUAGE_CODE == 'en': #request value of the current language 
     return News.objects.filter(language='en') #return filtered object if the current language is English 
    else: 
     return News.objects.filter(language='uk') 

要過濾基於用戶輸入的查詢集,您可以參閱POST方法:

from app.forms import BlogFilterForm 

class Blog(LoginRequiredMixin, AjaxListView): 
    context_object_name = "posts" 
    template_name = 'blog/blog.html' 
    page_template = 'blog/post_list.html' 
    success_url = '/blog' 

    def get_queryset(self): # define queryset 
     queryset = Post.objects.all() # default queryset 
     if self.request.method == 'POST': # check if the request method is POST 
      form = BlogFilterForm(self.request.POST) # define form 
      if form.is_valid(): 
       name = form.cleaned_data['name'] # retrieve data from the form 
       if name: 
        queryset = queryset.filter(name=name) # filter queryset 
     else: 
      queryset = queryset 
     return queryset 

    def get_context_data(self, **kwargs): 
     context = super(Blog, self).get_context_data(**kwargs) 
     context['form'] = BlogFilterForm() # define context to render the form on GET method 
     return context 

    def post(self, request, *args, **kwargs): # define post method 
     return super(Blog, self).get(request, args, kwargs) 

無盡的分頁應該可以正常工作。