切片查询集

时间:2016-01-19 13:15:13

标签: python json django

我正在处理电子商务网站的项目显示页面。所以假设该网站有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时才复制这些值,因此它会复制记录。我无法找到任何来源来克服这个问题,如果有人这样做过,请告诉我。

1 个答案:

答案 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]