如何解决在视图函数中使用分页器后出现的 "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
对象的详细信息。分页意味着您有对象的 集合 ,并且显示其中的一个子集,但这里有一个 Course
由 courses_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.
这是我的模型。我有一个多对一的关系。
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
对象的详细信息。分页意味着您有对象的 集合 ,并且显示其中的一个子集,但这里有一个 Course
由 courses_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, 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.