forked from rc/aircox
45 lines
1.5 KiB
Python
45 lines
1.5 KiB
Python
from django.db import models
|
|
from django.contrib.admin import filters
|
|
from django.utils.translation import gettext_lazy as _
|
|
|
|
|
|
__all__ = ('DateFieldFilter', 'DateTimeField')
|
|
|
|
|
|
class DateFieldFilter(filters.FieldListFilter):
|
|
""" Display date input """
|
|
template = 'admin/aircox/filters/date_filter.html'
|
|
input_type = 'date'
|
|
|
|
def __init__(self, field, request, params, model, model_admin, field_path):
|
|
self.field_generic = '%s__' % field_path
|
|
self.date_params = {k: v for k, v in params.items()
|
|
if k.startswith(self.field_generic)}
|
|
self.links = ((_('Exact'), self.field_generic + 'exact'),
|
|
(_('Since'), self.field_generic + 'gte'),
|
|
(_('Until'), self.field_generic + 'lte'))
|
|
super().__init__(field, request, params, model, model_admin, field_path)
|
|
|
|
def expected_parameters(self):
|
|
return [link[1] for link in self.links]
|
|
|
|
def choices(self, changelist):
|
|
for link in self.links:
|
|
yield {'label': link[0],
|
|
'name': link[1],
|
|
'value': self.date_params.get(link[1]),
|
|
'type': self.input_type,}
|
|
|
|
|
|
class DateTimeFieldFilter(DateFieldFilter):
|
|
""" Display datetime input """
|
|
input_type = 'datetime'
|
|
|
|
|
|
filters.FieldListFilter.register(
|
|
lambda f: isinstance(f, models.DateField), DateFieldFilter, take_priority=True)
|
|
|
|
filters.FieldListFilter.register(
|
|
lambda f: isinstance(f, models.DateTimeField), DateTimeFieldFilter, take_priority=True)
|
|
|