You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django 3.2.3分页功能异常:数据重复与丢失问题求助

Django分页数据重复与丢失问题解决

使用Django类视图实现分页时,出现数据重复和部分数据丢失的异常。通过Django Shell测试复现了该问题,测试代码及结果如下:

测试代码

from django.core.paginator import Paginator
from report.models import Grade, Exam

f = Exam.objects.all().filter(id=7)[0].full_mark
all = Grade.objects.all().filter(exam_id=7, value__gte=(f*0.95)).order_by('-value')
p = Paginator(all, 12)
for i in p.page(1).object_list:
    print(i.id)

第一页输出

2826
2617
2591
2912
2796
2865
2408
2501
2466
2681
2616
2563

第二页测试代码

for i in p.page(2).object_list:
    print(i.id)

第二页输出

2558
2466
2563
2920
2681
2824
2498
2854
2546
2606
2598
2614

问题原因

当前仅通过-value排序,当多条记录的value值相同时,数据库没有稳定的排序依据,每次执行分页查询时,同value的记录顺序可能随机变化,导致部分记录重复出现在不同页面,同时部分记录被遗漏。

解决方案

在排序条件中添加一个唯一字段(比如主键id)作为次要排序依据,确保查询集的排序稳定:

all = Grade.objects.all().filter(exam_id=7, value__gte=(f*0.95)).order_by('-value', 'id')

添加id排序后,当value相同时,会按照id升序排列,保证每次查询的结果顺序一致,分页时就不会出现数据重复或丢失的问题了。

内容的提问来源于stack exchange,提问作者Ahmed Abo 6

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 03:31:50