从 Django 表单中过滤出来的分页结果

问题描述

我正在尝试对从 Django 表单 GET 请求过滤的结果进行分页。但是,当我单击第二页时,它会将我重定向到表单页面。我搜索了类似的问题并尝试了几种方法,但不知何故这仍然不起作用。下面是我的代码截图。任何帮助将不胜感激。

view.py

def get_pictures_by_filters(request):
    if request.method == 'GET':
        form = GetPictureForm(request.GET)
        if form.is_valid():
            name = form.get_name()
            problem = form.get_problem()
            language = form.get_language()
            pictures = Picture.objects.filter(relatedGame=name,language__iregex=r'.*' + language)
            if problem:
                for p in problem:
                    pictures = pictures.filter(problem__contains=p)
            paginator = Paginator(pictures,1)
            page = request.GET.get('page')

            try:
                pictures = paginator.page(page)
            except PageNotAnInteger:
                pictures = paginator.page(1)
            except EmptyPage:
                pictures = paginator.page(paginator.num_pages)

            context = {'list_pictures': pictures,'page_obj': pictures}
            return render(request,'picture/show_pictures_by_filter.html',context)

    form = GetPictureForm()
    context = {
        'form': form
    }
    return render(request,'picture/get_pictures_by_filter.html',context)

urls.py

    path('pictures/filter',views.get_pictures_by_filters,name='get-pictures'),

forms.py

class GetPictureForm(forms.Form):

    def __init__(self,*args,**kwargs):
        super(GetPictureForm,self).__init__(*args,**kwargs)
        games = [(g.name,g.name) for g in Game.objects.all().order_by('-id')]
        problems = [(p.name,p.name) for p in Problem.objects.all()]
        self.fields['项目名称'] = forms.CharField(required=True,widget=forms.Select(choices=games))
        self.fields['语种'] = forms.CharField(required=False)
        self.fields['问题'] = forms.MultipleChoiceField(required=False,widget=forms.CheckBoxSelectMultiple,choices=problems)

    def get_name(self):
        data = self.cleaned_data['项目名称']
        return data

    def get_problem(self):
        data = self.cleaned_data['问题']
        return data

    def get_language(self):
        data = self.cleaned_data['语种']
        return data

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)