Reputation: 2122
I want to give pagination to following view. How can i give it because it have conditions as well form. I am not getting how to deal with with it. Please help me to integrate pagination in this 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})
Upvotes: 0
Views: 60
Reputation: 736
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
you can inherent from ListView
and use paginate_by
Use jobs = Jobs.objects.all()
instead of jobs = Jobs.objects.none()
if you need it to default to all data instead of empty queryset if the form is invalid. This is working
Upvotes: 2