Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from django import forms
- from django_filters.widgets import RangeWidget
- from datetime import date, timedelta
- import re
- class DateRangeField(forms.MultiValueField):
- widget = RangeWidget
- def __init__(self, *args, **kwargs):
- fields = (
- forms.CharField(),
- forms.CharField(),
- )
- super(DateRangeField, self).__init__(fields, *args, **kwargs)
- def find_date(self, datestr, find_last=False):
- if not datestr:
- return None
- year, month, day = [
- i and int(i) for i in
- (re.split(r'\D+', datestr) + [None, None, None])[:3]]
- if not year or not month:
- return None
- month = min(12, max(1, month))
- year = min(9999, max(1, year))
- any_day = date(year, month, day or 1)
- if find_last and not day:
- # dayが指定されていなくて最終日を探す
- any_day = (
- any_day.replace(day=1) + timedelta(days=32)
- ).replace(day=1) - timedelta(days=1)
- return any_day
- def compress(self, data_list):
- ''' 必須: slice(start_date, from_date)を返す
- '''
- if data_list:
- start = self.find_date(data_list[0])
- if data_list[1]:
- stop = self.find_date(data_list[1], True)
- else:
- stop = None
- return slice(start, stop)
- return None
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement