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

Вернуться на верх