1

官方 Django 文档的启发,我想使用此功能一次检索 20 个日志页面:

        logs_list = (
            Log.objects.filter(modified_object_id=device_id)
            .order_by("-created_at")
            .values(
                "username",
                "action_type",
                "modified_model_name",
                "modified_object_name",
                "group_name",
                "role_name",
                "workspace_name",
                "created_at",
                "modification",
                "modified_object_id",
                "user_id",
            )
        )
        # Pagination
        paginator = Paginator(logs_list, 20)
        try:
            logs = paginator.get_page(page)
        except PageNotAnInteger:
            # If page is not an integer, raise exception
            ValidationError("page_number_invalid")
        except EmptyPage:
            # If page is out of range (e.g. 9999), deliver last page of results.
            return Response(data=[], status=status.HTTP_200_OK)
        print(logs)
        return Response(data=logs, status=status.HTTP_200_OK)

我知道device_id(UUID) 和page(int) 变量是正确的。Querysetlogs_list包含多个有效值,但该logs值显示<Page 1 of 1>为打印时,此方法的输出为{}.

为什么分页不能正常工作?

4

1 回答 1

1

.get_page返回一个没有列表的 Page 对象,具有给定的从 1 开始的索引。这就是它打印的原因<Page 1 of 1>

打印列表 -print(list(logs))

您还可以使用 for 循环进行迭代,例如 -

for log in logs:
    print(log)

如果您得到空结果,请检查您的过滤器,尝试打印 logs_list。

于 2019-07-22T15:57:32.100 回答