Фильтр Django по дате в любом диапазоне дат - PullRequest
0 голосов
/ 29 сентября 2018

Я пытаюсь отфильтровать модель, у которой есть DateField (дата), чтобы получить queryset экземпляров, дата которых есть в любом из списка DateRanges, но я изо всех сил пытаюсь выяснитьТочная логика мне нужна.

Так, например, если у меня есть следующие модели:

class Period(models.Model):
    user = models.ForeignKey(User)
    range = DateRangeField()

class Game(models.Model):
    date = models.DateField()

, и я создал 3 разных диапазона дат, как мне получить список всехИгры, чья дата находится в одном из этих трех диапазонов дат?

Я знаю, что могу перебирать диапазоны и использовать для этого цепной фильтр Q(), но мне нужно поместить все это в аннотацию на большом queryset, который должен будет использовать подзапрос, чтобы он не работал.

Мои текущие усилия выглядят так: -

periods = Period.objects.filter(user__id=OuterRef('id')).values_list('range', flat=True)
games_in_periods = Game.objects.filter(date__contained_by=Subquery(periods))

, но это не работает, потому что contained_by сравнивается с диапазоном дат, но queryset диапазонов дат.

Такое ощущение, что я близко, но я, должно быть, упустил что-то глупое.

Есть идеи?

1 Ответ

0 голосов
/ 12 февраля 2019

Я понимаю вашу проблему, документация о Subquery недостаточно ясна.

Вы пробовали таким образом?

periods = Period.objects.filter(user__id=OuterRef('id')).values('range')
games_in_periods = Game.objects.filter(date__range=[Subquery(periods)])
...