2013-04-25 72 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) 

无尽的分页应该可以正常工作。