gpt4 book ai didi

django - 使用带有 django-endless-pagination 的过滤器

转载 作者:行者123 更新时间:2023-12-01 04:14:21 25 4
gpt4 key购买 nike

我正在使用 Django endles-pagination 以无限滚动方式加载页面。我还有一些根据条件过滤数据的过滤器(例如,根据价格进行价格 slider 过滤)。现在,当页面加载时,过滤器现在仅从加载的页面中过滤,尽管我希望它从所有已加载或将要加载的页面中过滤。有没有办法做到这一点(通过发出一些ajax请求或其他东西)?

对此的任何帮助都会很棒。非常感谢。

最佳答案

要过滤数据,您必须在请求过滤查询的 View 中重新定义 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)

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

关于django - 使用带有 django-endless-pagination 的过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16220750/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com