def _clean_dates(self, values):
"""return a list of either a datetime, date or None.
Each one can have an operator."""
if not values:
return []
dates = []
operators = re.compile('<=|>=|<|>|=')
for block in [x.strip() for x in values.split(',') if x.strip()]:
if operators.findall(block):
operator, = operators.findall(block)
else:
operator = '='
rest = operators.sub('', block).strip()
if rest.lower() in ('null', 'incomplete'):
date_obj = None
elif rest.lower() == 'today':
date_obj = timezone.now().replace(hour=0, minute=0, second=0)
elif rest.lower() == 'yesterday':
date_obj = timezone.now().replace(hour=0, minute=0, second=0)
date_obj -= datetime.timedelta(days=1)
else:
try:
date_obj = dateutil.parser.parse(rest)
except ValueError:
raise forms.ValidationError(f'Unable to parse {rest!r}')
if timezone.is_naive(date_obj):
date_obj = timezone.make_aware(date_obj)
dates.append((operator, date_obj))
return dates
评论列表
文章目录