This is my model. I have a many to one relationship.
class Course(models.Model):
course_name = models.CharField(max_length=100)
class Coursegk(models.Model):
question = models.CharField(max_length=1000)
option_one = models.CharField(max_length=100)
option_two = models.CharField(max_length=100)
option_three = models.CharField(max_length=100)
option_four = models.CharField(max_length=100)
answer = models.CharField(max_length=100)
courses = models.ForeignKey(Course, on_delete=models.CASCADE, related_name="display")
This is my views.py page
def showcourses(request):
details = Course.objects.all()
paginator = Paginator(details, 2)
page_number = request.GET.get('page')
page_obj = paginator.get_page(page_number)
return render(request, 'index.html', {'data':page_obj})
def displaymcqpage(request, courses_id):
displaymcq = Course.objects.get(id=courses_id)
paginator = Paginator(displaymcq, 2)
page_number = request.GET.get('page')
page_obj = paginator.get_page(page_number)
return render(request, 'coursegk.html', {'display':page_obj})
Now paginator is working fine for the index.html page. But when I go to coursegk.html page from index.html page I am getting "object of type 'Course' has no len()" error. How to use paginator for the displaymcqpage function?
CodePudding user response:
How to use paginator for the
displaymcqpagefunction?
You don't. This is a detail view: you are showing details for a single Course object. Pagination means that you have a collection of objects, and you show a subset of these, but here there is a single Course determined by the courses_id parameter, hence pagination makes no sense.
You can paginate the Coursegk objects related to that Course with:
def displaymcqpage(request, courses_id):
displaymcq = Course.objects.get(id=courses_id)
paginator = Paginator(displaymcq.display.all(), 2)
page_number = request.GET.get('page')
page_obj = paginator.get_page(page_number)
return render(request, 'coursegk.html', {'dta': displaymcq, 'coursegks': page_obj})
and here we thus paginate the related Coursegk objects, but then we do not paginate the Course records.
Note: It is often better to use
get_object_or_404(…)[Django-doc], then to use.get(…)[Django-doc] directly. In case the object does not exists, for example because the user altered the URL themselves, theget_object_or_404(…)will result in returning a HTTP 404 Not Found response, whereas using.get(…)will result in a HTTP 500 Server Error.
