def get_queryset(self):
"""returns actions"""
start_date = self.request.GET.get('start')
end_date = self.request.GET.get('end')
if not start_date or not end_date:
raise ParseError("Period frame missing")
queryset = self.model.objects.all()
queryset = self._apply_in_action_type_lookup(queryset)
queryset = self._apply_in_charge_lookup(queryset)
try:
start_date = self._parse_date(start_date)
end_date = self._parse_date(end_date)
except ValueError:
raise ParseError("Invalid period frame")
start_datetime = datetime.combine(start_date, time.min)
end_datetime = datetime.combine(end_date, time.max)
if end_datetime < start_datetime:
return self.model.objects.none()
queryset = queryset.filter(
Q(planned_date__lte=start_datetime, end_datetime__gte=end_datetime) | # starts before, ends after period
Q(planned_date__gte=start_datetime, end_datetime__lte=end_datetime) | # starts and ends during period
Q(planned_date__lte=start_datetime, end_datetime__gte=start_datetime) | # starts before, ends during
Q(planned_date__lte=end_datetime, end_datetime__gte=end_datetime) | # starts during period, ends after
Q(
planned_date__gte=start_datetime,
end_datetime__isnull=True,
planned_date__lte=end_datetime
) # no end, starts during period
)
return queryset
评论列表
文章目录