我正在处理电子商务网站的项目显示页面。所以假设该网站有10个项目,现在我需要每次获取2个项目,我们需要使用之前获取的第二个元素的last_index和last_price来获取项目。所以获取记录的JSON就像这样
{
"last_price": 6000,
"last_index": 12
}
因此,当项目列表页面第一次打开时,JSON会像这样开始
{
"last_price": 6000,
"last_index": 0
}
在django结束时,我正在解雇此查询。
if params['last_index'] == 0:
item_list = queryset.order_by('-price_val').filter(price_val__lte=params['last_price'])[:2]
elif params['last_index'] > 0:
item_list = queryset.order_by('-price_val').filter(price_val__lte=params['last_price']).filter(~Q(pk=params['last_index']))[:2]
现在这10件物品价格如下
{0:100, 1:200, 2:300, 3:400, 4:900, 5:1200, 6:300,7:100, 8:500 9:200 }
现在当django订购它订购的元素时 [5,4,8,3,6,2,9,1,7,0]
并在第一次到达API时以两个切片提取项目
[5,4]
[8,3]
[6,2]
[9,1]
[7,0]
现在当它到达第3组时,它只是在找到last_price
时才复制这些值,因此它会复制记录。我无法找到任何来源来克服这个问题,如果有人这样做过,请告诉我。
答案 0 :(得分:1)
粗略地说,你需要两者都订购并过滤两者:
item_list = queryset\
.order_by('-price_val', 'pk')\
.filter(
Q(price_val__lt=params['last_price']) |
Q(price_val=params['last_price'], pk__gt=params['last_index'])
)[:2]