DRF 排序 + 分页出现重复/缺失:稳定排序键的必要性
现象
?ordering=-created_at的分页接口出现翻页后重复或漏项。
原因
仅按非唯一字段排序;同一时间戳的多条记录跨页移动。
修复
为排序增加稳定的次级键:
class OrderViewSet(ModelViewSet):
queryset = Order.objects.all()
ordering_fields = ["created_at", "id"]
ordering = ("-created_at", "-id") # 稳定排序
或使用 游标分页:
REST_FRAMEWORK = {
"DEFAULT_PAGINATION_CLASS": "rest_framework.pagination.CursorPagination",
"PAGE_SIZE": 20,
"CURSOR_PAGINATION_ORDERING": "-created_at,-id",
}
这是我在 gplpal 的 API 规范里强制要求的规则之一。
评论 0