2

假设我进行以下查询:

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)

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

4

1 回答 1

3

查询集是惰性且可链接的

您可以随意过滤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...
于 2013-02-20T20:42:51.660 回答