我正在使用django 1.5。我需要将页面拆分为数据。我阅读了文档here。我不确定它是否首先检索所有数据。由于我有一个大表,所以使用'limit'之类的东西应该更好。感谢。
修改
我在ModelManager中使用queryset。
示例:
class KeywordManager(models.Manager):
def currentkeyword(self, kw, bd, ed):
wholeres = super(KeywordManager, self).get_query_set() \
.values("sc", "begindate", "enddate") \
.filter(keyword=kw, begindate__gte=bd, enddate__lte=ed) \
.order_by('enddate')
return wholeres
答案 0 :(得分:2)
首先,queryset
是一个懒惰的对象,django会在你请求后立即检索数据,但是如果你不这样做,django就不会碰到数据库。如果您在查询集中使用任何列表方法len()
,您将评估所有查询集并强制django检索所有数据。
如果您将queryset
传递给Paginator,它将无法检索所有数据,因为正如文档所述,如果您传递查询集,它将使用.count()方法来避免转换{{1进入列表并使用queryset
方法。
答案 1 :(得分:0)
如果您的数据不是来自数据库,那么是 - Paginator必须首先加载所有信息才能确定如何分割"它
如果您不是,并且您只是使用Django自动生成的SQL与数据库交互,那么Paginator会执行查询以确定数据库中的项目数(即SQL COUNT()
)并使用您提供的值来确定要生成的页数。示例:count()
返回43,您想要10个结果的页面 - 生成的页数相当于:43 % 10 + 1 = 5