python中的for循环在查询集中获取第n个元素

时间:2018-12-04 04:58:50

标签: python django python-2.7 django-models

请问您是否可以在下面查询我的python代码:

gp_id= [0,1,2]
for gp in gp_id:
    specail_list = Special.objects.filter(
        promotion=False, 
        start__lte=date_instance, 
        minimum_stay__lte=nights, 
        object_id=room_filter.id, 
        end__gte=date_instance, 
        is_active=True, 
        member_deal=False
    )[gp]
    print specail_list

2 个答案:

答案 0 :(得分:1)

所以我认为您正在尝试询问列表中的前三个元素,索引为0、1、2。因此,尽管您的操作是有效的,但这种方法更好。

切片-每个python程序员都应该知道的常用功能:

“切片: https://docs.python.org/3/library/functions.html#slice

的Python文档

用于“限制查询集”的Django文档: https://docs.djangoproject.com/en/2.1/topics/db/queries/#limiting-querysets

将从未输入的第0个索引处开始抓取前三个元素。括号也可以是[0:3]

special_list = Special.objects.filter(
    promotion=False, 
    start__lte=date_instance, 
    minimum_stay__lte=nights, 
    object_id=room_filter.id, 
    end__gte=date_instance, 
    is_active=True, 
    member_deal=False
)[:3]

答案 1 :(得分:0)

我认为您可以像这样循环播放:

special_queryset = Special.objects.filter(
    promotion=False, 
    start__lte=date_instance, 
    minimum_stay__lte=nights, 
    object_id=room_filter.id, 
    end__gte=date_instance, 
    is_active=True, 
    member_deal=False
    id__in = gp_id
)
for i in special_queryset:
    print(i)

如果要为查询集中的项目更新相同的内容,请使用update()方法。

special_queryset.update(promotion=True)