Как решить ошибку "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.