django-timedelta-field / timedelta / widgets.py

from django import forms
import datetime

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, (str, unicode)):
            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):
            data = parse(data)
        
        return initial != data
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.