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
相关产品推荐
相关产品推荐

