form_fields.py 1.1 KB

123456789101112131415161718192021222324252627282930
  1. import datetime
  2. from django import forms
  3. from . import fields
  4. class LimitedDateTimeField(forms.DateTimeField):
  5. default_error_messages = forms.DateTimeField.default_error_messages.copy()
  6. default_error_messages.update(fields.ERROR_MESSAGES)
  7. def __init__(self, upper_limit=None, lower_limit=None, input_formats=None, *args, **kwargs):
  8. self.upper_limit = upper_limit
  9. self.lower_limit = lower_limit
  10. if self.upper_limit and not (isinstance(self.upper_limit, (datetime.datetime, datetime.date)) or callable(self.upper_limit)):
  11. raise AttributeError
  12. if self.lower_limit and not (isinstance(self.lower_limit, (datetime.datetime, datetime.date)) or callable(self.lower_limit)):
  13. raise AttributeError
  14. super(LimitedDateTimeField, self).__init__(input_formats=None, *args, **kwargs)
  15. def clean(self, value):
  16. value = super(LimitedDateTimeField, self).clean(value)
  17. def error(message):
  18. raise forms.ValidationError(self.error_messages[message])
  19. fields.limit_date(value, self.lower_limit, self.upper_limit, error)
  20. return value