Skip to main content
 首页 » 编程设计

python之在创建后修改 Django QuerySet 对象

2024年08月29日30落叶

假设我进行以下查询:

showtimes = ShowTime.objects.filter( 
    start_date__lte=start, 
    end_date__gte=end, 
    movie__slug=movie.slug, 
    city=city, 
    visible=1) 

现在我想要一个函数,它接受那个queryset 对象 并根据其他一些属性进一步过滤结果,如下所示:

def is_subtitled_3d(showtimes): 
    return ( 
        showtimes.language == LANGUAGE_SUBTITLED and 
        showtimes.type_vip == None and 
        showtimes.type_3d == 1 and 
        showtimes.type_gtmax == None and 
        showtimes.type_xd == None) 

类似的东西是否适用于修改对象,或者有不同的方法吗?

请您参考如下方法:

查询集是 lazy and chainable

您可以根据需要多次过滤放映时间。我不相信你的语法是正确的,但你可以使用标准的 filter 来保持过滤查询集

def is_subtitled_3d(showtimes): 
  return showtimes.filter( 
    language=LANGUAGE_SUBTITLED,         
    type_vip__isnull=True, 
    type_3d=1, 
    type_gtmax__isnull=True, 
    type_xd__isnull=True 
  ) 

也许如果用户想要对 3d 电影进行过滤,以说明如何组合过滤器,例如:

showtimes = ShowTime.objects.filter( 
    start_date__lte=start, 
    end_date__gte=end, 
    movie__slug=movie.slug, 
    city=city, 
    visible=1) 
 
if request.GET.get('is_3d_movie'): 
  showtimes = showtimes.filter(type_3d=1) 
etc...