Как сделать нумерацию страниц с формой - PullRequest
0 голосов
/ 04 февраля 2019

Я хочу сделать пагинацию следующим видом.Как я могу дать его, потому что у него есть условия, а также форма.Я не понимаю, как с этим справиться.Пожалуйста, помогите мне включить нумерацию страниц в этом JobListView

class JobListView(LoginRequiredMixin, generic.TemplateView):
    template_name = 'jobs/job.html'

    def get(self, request, *args, **kwargs):
        context = super(JobListView, self).get_context_data(**kwargs)

        if 'status' in request.GET:
            form = JobSearchForm(request.GET)

            if form.is_valid():
                status = form.cleaned_data['status']
                start_date = form.cleaned_data['start_date']
                end_date = form.cleaned_data['end_date']
                company = self.request.user.userprofile.user_company

                lookups = (Q(job_company=self.request.user.userprofile.user_company)) 

                if start_date:
                    lookups = lookups & Q(job_created_on__gte=start_date)
                if end_date:
                    lookups = lookups & Q(job_created_on__lte=end_date)
                if status == 'Active':
                    lookups = lookups & Q(job_status=status)
                if status == 'Inactive':
                    lookups = lookups & Q(job_status=status)

                jobs=Jobs.objects.exclude(job_is_deleted = True).filter(lookups)

        else:
            form = JobSearchForm()
            company_name = self.request.user.userprofile.user_company
            jobs = Jobs.objects.exclude(
                                job_is_deleted = True
                            ).filter(
                                job_company=self.request.user.userprofile.user_company
                            )

        return render(request, self.template_name, {'form': form, 'jobs': jobs}) 

1 Ответ

0 голосов
/ 04 февраля 2019
class JobListView(LoginRequiredMixin, generic.ListView):
    template_name = 'jobs/job.html'
    form_ = JobSearchForm()
    paginate_by = 5
    context_object_name = 'jobs'

    def get_queryset(self, *args, **kwargs):
        if 'status' in self.request.GET:
            self.form_ = JobSearchForm(self.request.GET)
            jobs = Jobs.objects.none()

            if self.form_.is_valid():
                status = self.form_.cleaned_data['status']
                start_date = self.form_.cleaned_data['start_date']
                end_date = self.form_.cleaned_data['end_date']
                company = self.request.user.userprofile.user_company

                lookups = (Q(job_company=self.request.user.userprofile.user_company)) 

                if start_date:
                    lookups = lookups & Q(job_created_on__gte=start_date)
                if end_date:
                    lookups = lookups & Q(job_created_on__lte=end_date)
                if status == 'Active':
                    lookups = lookups & Q(job_status=status)
                if status == 'Inactive':
                    lookups = lookups & Q(job_status=status)

                jobs = Jobs.objects.exclude(job_is_deleted = True).filter(lookups)
        else:
            company_name = self.request.user.userprofile.user_company
            jobs = Jobs.objects.exclude(
                                job_is_deleted = True
                            ).filter(
                                job_company=self.request.user.userprofile.user_company
                            )
        return jobs


    def get_context_data(self, *args, **kwargs):
        context = super(JobListView, self).get_context_data(**kwargs)
        context["form"] = self.form_
        return context

вы можете присваивать ListView и использовать paginate_by

Использовать jobs = Jobs.objects.all() вместо jobs = Jobs.objects.none(), если вам нужно по умолчанию для всех данных вместо пустого набора запросов, если форманедействительным.Это работает

...