在创建Django QuerySet对象后对其进行修改

时间:2013-02-20 20:40:10

标签: python django

假设我做了以下查询:

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

现在我希望有一个函数接收queryset object并根据其他一些属性进一步过滤结果,如下所示:

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)

这样的东西可以用来修改对象吗?还是有不同的方法可以做到这一点?

1 个答案:

答案 0 :(得分:3)

查询集为lazy and chainable

您可以根据需要多次过滤showtimes。我不相信您的语法是正确的,但您可以使用标准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...