如何在 django Rest 框架中处理动态表的分页

问题描述 投票:0回答:1

我有一个存储用户收藏夹的表:

当用户

X
将某个项目
Y
标记为他的最爱时,一条新记录将添加到此表中:

id 用户ID item_id is_active
... X 真实

当用户

X
取消了对项目
Y
的收藏时,
is_active
字段将设置为
false

id 用户ID item_id is_active
... X

当用户 X 重新收藏项目 Y 时,

is_active
字段将设置为 true。实际上这是通过 django
create_or_update()
方法完成的。

所以表格是这样的:

id 用户ID item_id is_active
1 1001 201 真实
2 1001 202 真实
3 1001 203 真实
4 1001 204 真实
5 1001 205 真实
6 1001 206
7 1002 201 真实
8 1002 202 真实
9 1003 201 真实

当用户 1001 请求他的收藏夹列表时,查询集将为:

queryset = Favorite.Objects.filter(user=1001, is_active=true)

响应将是(我只列出记录ID):

[1, 2, 3, 4, 5]

如果分页大小设置为2,用户1001将得到响应:

{
next: ...?page=2,
previous: null,
data:[1, 2]
}

但是如果用户 1001 现在取消了他对第 202 项的收藏,那么,当他请求第 2 页的收藏夹列表时,他将得到:

{
next: ...?page=3,
previous: ...?page=1,
data:[4, 5]
}

在这种情况下,记录 id = 3 会丢失。

我该如何解决这个问题?最佳实践是什么?我错过了什么?

我不是专业程序员,非常感谢任何帮助。您可以更改所有内容,例如表结构或查询集方法....

django django-rest-framework pagination
1个回答
0
投票

当项目 202 从收藏夹中取消时,查询集将为 [1,3,4,5]。因此 3 已移至第一页,现在第二页包括 4,5。

您可以根据您的需要决定分页系统。

在实时数据分页情况下,您的数据有很多变化,例如 Twitter 或 Instagram,他们使用基于 cruuser 的分页而不是基于页面的分页 您可以在此链接中查看完整指南: https://www.sitepoint.com/paginating-real-time-data-cursor-based-pagination/ 还有其他方法可以实现分页,例如基于时间戳的分页。

您可以考虑查看有关restful API中分页的链接: https://www.laurencegellert.com/2016/08/webservice-api-design-tips- Correct-pagination-and-exusing-deleted-rows/

当从 RESTful API 中的分页集中删除数据项时,有时保持分页稳定并且不动态更改表被认为是良好的做法。但这并不总是正确的。

决定哪个系统适合您的项目可能很棘手,您应该首先描述您的项目和需求

© www.soinside.com 2019 - 2024. All rights reserved.