Я пытаюсь отфильтровать модель, у которой есть 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
диапазонов дат.
Такое ощущение, что я близко, но я, должно быть, упустил что-то глупое.
Есть идеи?