如何解决在视图函数中使用分页器后出现的 "object of type 'Course' has no len()" 错误?

How to solve "object of type 'Course' has no len()" error that I am getting after using paginator in a view function?

这是我的模型。我有一个多对一的关系。

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})

现在 index.html 页面的分页器工作正常。但是,当我从 index.html 页面转到 coursegk.html 页面时,出现“'Course' 类型的对象没有 len()”错误。 displaymcqpage功能如何使用paginator?

How to use paginator for the displaymcqpage function?

你没有。这是一个详细视图:您显示的是单个 Course 对象的详细信息。分页意味着您有对象的 集合 ,并且显示其中的一个子集,但这里有一个 Coursecourses_id 参数确定,因此分页没有意义。

您可以对与 Course 相关的 Coursegk 个对象进行分页:

def displaymcqpage(request, courses_id):
    displaymcq = Course.objects.get(id=courses_id)
    paginator = Paginator(displaymcq<strong>.display.all()</strong>, 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 记录进行分页。


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, the get_object_or_404(…) will result in returning a HTTP 404 Not Found response, whereas using .get(…) will result in a HTTP 500 Server Error.