Advertisement
Guest User

Untitled

a guest
May 28th, 2016
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.40 KB | None | 0 0
  1. from django import forms
  2. from django_filters.widgets import RangeWidget
  3. from datetime import date, timedelta
  4. import re
  5.  
  6.  
  7. class DateRangeField(forms.MultiValueField):
  8. widget = RangeWidget
  9.  
  10. def __init__(self, *args, **kwargs):
  11. fields = (
  12. forms.CharField(),
  13. forms.CharField(),
  14. )
  15. super(DateRangeField, self).__init__(fields, *args, **kwargs)
  16.  
  17. def find_date(self, datestr, find_last=False):
  18. if not datestr:
  19. return None
  20. year, month, day = [
  21. i and int(i) for i in
  22. (re.split(r'\D+', datestr) + [None, None, None])[:3]]
  23. if not year or not month:
  24. return None
  25. month = min(12, max(1, month))
  26. year = min(9999, max(1, year))
  27. any_day = date(year, month, day or 1)
  28. if find_last and not day:
  29. # dayが指定されていなくて最終日を探す
  30. any_day = (
  31. any_day.replace(day=1) + timedelta(days=32)
  32. ).replace(day=1) - timedelta(days=1)
  33. return any_day
  34.  
  35. def compress(self, data_list):
  36. ''' 必須: slice(start_date, from_date)を返す
  37. '''
  38. if data_list:
  39. start = self.find_date(data_list[0])
  40. if data_list[1]:
  41. stop = self.find_date(data_list[1], True)
  42. else:
  43. stop = None
  44. return slice(start, stop)
  45. return None
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement