我有一个存储用户收藏夹的表:
当用户
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 会丢失。
我该如何解决这个问题?最佳实践是什么?我错过了什么?
我不是专业程序员,非常感谢任何帮助。您可以更改所有内容,例如表结构或查询集方法....
当项目 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 中的分页集中删除数据项时,有时保持分页稳定并且不动态更改表被认为是良好的做法。但这并不总是正确的。
决定哪个系统适合您的项目可能很棘手,您应该首先描述您的项目和需求