datatracker/timedelta/widgets.py

47 lines
1.4 KiB
Python

import datetime
from django import forms
from django.utils import six
from .helpers import nice_repr, parse
class TimedeltaWidget(forms.TextInput):
def __init__(self, *args, **kwargs):
return super(TimedeltaWidget, self).__init__(*args, **kwargs)
def render(self, name, value, attrs=None):
if value is None:
value = ""
elif isinstance(value, six.string_types):
pass
else:
if isinstance(value, int):
value = datetime.timedelta(seconds=value)
value = nice_repr(value)
return super(TimedeltaWidget, self).render(name, value, attrs)
def _has_changed(self, initial, data):
"""
We need to make sure the objects are of the canonical form, as a
string comparison may needlessly fail.
"""
if initial in ["", None] and data in ["", None]:
return False
if initial in ["", None] or data in ["", None]:
return True
if initial:
if not isinstance(initial, datetime.timedelta):
initial = parse(initial)
if not isinstance(data, datetime.timedelta):
try:
data = parse(data)
except TypeError:
# initial didn't throw a TypeError, so this must be different
# from initial
return True
return initial != data