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



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

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

这是我的观点。每页

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页面。但是当我从index.html页面转到coursegk.html页面时;"Course"类型的对象没有len(("错误如何将分页器用于displaymcqpage函数?

如何为displaymcqpage函数使用分页器?

您没有。这是一个详细信息视图:您正在显示单个Course对象的详细信息。分页意味着您有一个对象集合,并显示这些对象的子集,但这里只有一个由courses_id参数确定的Course,因此分页没有意义。

您可以使用对与Course相关的Coursegk对象进行分页

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(…)将导致返回HTTP404NotFound响应,而使用.get(…)将导致HTTP 500服务器错误

相关内容

最新更新