Skip to content
Snippets Groups Projects
Commit 5c9a0de5 authored by Konrad Mohrfeldt's avatar Konrad Mohrfeldt :koala:
Browse files

feat: remove default values for timeslot filter

The default values break some valid use cases and there’s no real value
in applying them by default.

refs #189
parent f3459890
No related branches found
No related tags found
1 merge request!28refactor timeslot API filters
......@@ -184,22 +184,13 @@ class TimeSlotFilterSet(filters.FilterSet):
"If specified without a datetime value the current date and time is assumed."
),
)
# The start/end filters will always be applied even if no query parameter has been set.
# This is because we enforce a value in the clean_start and clean_end methods
# of the filterset form.
start = filters.DateFilter(
method="filter_start",
help_text=(
"Only returns timeslots after that start on or after the specified date. "
"By default, this is set to the current date."
),
help_text="Only returns timeslots that start at or after the specified datetime.",
)
end = filters.DateFilter(
method="filter_end",
help_text=(
"Only returns timeslots that end on or before the specified date. "
"By default, this is set to value of the start filter + 60 days."
),
help_text="Only returns timeslots that end before the specified datetime.",
)
schedule_ids = IntegerInFilter(
......@@ -242,26 +233,6 @@ class TimeSlotFilterSet(filters.FilterSet):
queryset = self.filter_surrounding(queryset, "surrounding", timezone.now())
return queryset
def get_form_class(self):
form_cls = super().get_form_class()
class TimeSlotFilterSetFormWithDefaults(form_cls):
def clean_start(self):
start = self.cleaned_data.get("start", None)
return start or timezone.now().date()
def clean_end(self):
end = self.cleaned_data.get("end", None)
return end or self.cleaned_data["start"] + datetime.timedelta(days=60)
# We only want defaults to apply in the context of the list action.
# When accessing individual timeslots we don’t want the queryset to be restricted
# to the default range of 60 days as get_object would yield a 404 otherwise.
if self.request.parser_context["view"].action == "list":
return TimeSlotFilterSetFormWithDefaults
else:
return form_cls
class Meta:
model = models.TimeSlot
fields = [
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment