我是python django的新手。我正在使用APIView。我正在查看分页代码。我浏览了许多代码,但在所有这些代码中,我都有一个担忧。
他们都从表中获取所有数据,然后对这些数据进行分页。
zones = Zone.objects.all()
paginator = Paginator(zones, 2)
page = 2
zones = paginator.page(page)
serializer = ZoneSerializer(zones, many=True)
return {"data": serializer.data, 'count': zones.paginator.count, "code": status.HTTP_200_OK, "message": 'OK'}
我的期望是我没有得到所有记录,然后使用分页器进行分页。否则,我将不得不编写自己的代码来处理它。
答案 0 :(得分:2)
它不是从数据库中获取所有记录。
看看这个(使用django shell)。请注意LIMIT
:
from django.db import connection
from apps.question.models import Question
from django.core.paginator import Paginator
p = Paginator(Question.objects.all(),2)
print(connection.queries)
[]
p.page(1)[0] # Accessing one element in page
print(connection.queries)
[{'sql': 'SELECT COUNT(*) AS "__count" FROM "question"',
'time': '0.001'},
{'sql': 'SELECT <all fields> FROM "question" ORDER BY "question"."id" DESC LIMIT 2',
'time': '0.000'},
]
注意:我从第二个查询中删除了所有字段的列表,因此很适合这里。