Как решить ошибку "object of type 'Course' has no len()", которую я получаю после использования paginator в функции представления?
Вот моя модель. У меня есть отношения "многие к одному".
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")
Это моя страница views.py
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})
Теперь paginator работает нормально для страницы index.html. Но когда я перехожу на страницу coursegk.html со страницы index.html, я получаю ошибку "object of type 'Course' has no len()". Как использовать paginator для функции displaymcqpage?
Как использовать пагинатор для функции
displaymcqpage?
Вы не. Это представление деталей: вы показываете детали для одного Course объекта. Пагинация означает, что у вас есть коллекция объектов, и вы показываете подмножество этих объектов, но здесь есть единственный Course, определяемый параметром courses_id, поэтому пагинация не имеет смысла.
Вы можете постранично отобразить Coursegk объекты, связанные с этим Course с помощью:
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})
и здесь мы таким образом пагинация связанных Coursegk объектов, но затем мы не пагинация Course записей.
Примечание: Часто лучше использовать
get_object_or_404(…)[Django-doc], чем использовать.get(…)[Django-doc] напрямую. В случае, если объект не существует, например, потому что пользователь сам изменил URL,get_object_or_404(…)приведет к возвращению ответа HTTP 404 Not Found, в то время как использование.get(…)приведет к ответу HTTP 500 Server Error.