|
|
|
@ -168,77 +168,3 @@ class RangeFilter(admin.FieldListFilter): |
|
|
|
raise IncorrectLookupParameters(e) |
|
|
|
|
|
|
|
return queryset |
|
|
|
|
|
|
|
|
|
|
|
class DateRangeFilter(admin.FieldListFilter): |
|
|
|
template = "admin/date_range_filter.html" |
|
|
|
|
|
|
|
def __init__(self, field, request, params, model, model_admin, field_path): |
|
|
|
self.model = model |
|
|
|
self.model_admin = model_admin |
|
|
|
self.lookup_kwargs = [f"{field_path}__gte", f"{field_path}__lte"] |
|
|
|
form_data = {} |
|
|
|
for p in self.expected_parameters(): |
|
|
|
if p in params: |
|
|
|
value = params.pop(p)[-1] |
|
|
|
form_data[p] = prepare_lookup_value( |
|
|
|
p, value, self.list_separator |
|
|
|
) |
|
|
|
super().__init__(field, request, params, model, model_admin, field_path) |
|
|
|
form = self.get_date_form(form_data) |
|
|
|
if form.is_valid(): |
|
|
|
self.used_parameters = { |
|
|
|
key: [value] |
|
|
|
for key, value in form.cleaned_data.items() |
|
|
|
if value is not None |
|
|
|
} |
|
|
|
else: |
|
|
|
self.used_parameters = {} |
|
|
|
|
|
|
|
def has_output(self): |
|
|
|
return self.model.objects.exists() |
|
|
|
|
|
|
|
def expected_parameters(self): |
|
|
|
return self.lookup_kwargs |
|
|
|
|
|
|
|
def choices(self, changelist): |
|
|
|
form_params = { |
|
|
|
key: value[-1] for key, value in self.used_parameters.items() |
|
|
|
} |
|
|
|
return [ |
|
|
|
{ |
|
|
|
"query_string": changelist.get_query_string( |
|
|
|
remove=self.lookup_kwargs |
|
|
|
), |
|
|
|
"form": self.get_date_form(form_params, changelist), |
|
|
|
} |
|
|
|
] |
|
|
|
|
|
|
|
def get_date_form(self, context={}, changelist=None): |
|
|
|
date_fields = { |
|
|
|
name: forms.DateField( |
|
|
|
required=False, |
|
|
|
label=(_("De") if "__gte" in name else _("Até")), |
|
|
|
widget=forms.DateInput( |
|
|
|
attrs={ |
|
|
|
"class": "datepicker admin_filter", |
|
|
|
"placeholder": ( |
|
|
|
_("De") if "__gte" in name else _("Até") |
|
|
|
), |
|
|
|
"data-clear": ( |
|
|
|
changelist.get_query_string( |
|
|
|
remove=[ |
|
|
|
name, |
|
|
|
] |
|
|
|
) |
|
|
|
if changelist |
|
|
|
else "" |
|
|
|
), |
|
|
|
} |
|
|
|
), |
|
|
|
) |
|
|
|
for name in self.lookup_kwargs |
|
|
|
} |
|
|
|
DateForm = type("DateForm", (forms.Form,), date_fields) |
|
|
|
|
|
|
|
return DateForm(context) |
|
|
|
|