Django,对多个查询集进行分页

Django, pagination over multiple queryset

我正在尝试提供一个 api 端点,它在多个查询集上提供分页响应。

a = Foo.objects.filter_a()
b = Foo.objects.filter_b()


paginator = Paginator(a + b, 10) # a + b is just symbolic, add two querysets

page = 3
qs = paginator.page(page)

假设每个页面有 10 个元素,# of a 是 23 那么 page-3 将 return 3 来自 a 和 7 来自 b

而且我们必须假设 ab 可能很大,并且保持查询集的惰性是理想的

您可以使用 union 组合两个或多个查询集:

paginator = Paginator(a.union(b, all=True), 10)

OR 运算符 | 也可以工作:

paginator = Paginator(a | b, 10)