# This one works better than the official one, and has a nice reset button.
# feel free to comment :-)

class SplitDateTimeResetField(MultiValueField):
    widget = SplitDateTimeResetWidget

    def __init__(self, required=True, widget=None, label=None, initial=None):
        fields = (DateField(), TimeField())
        super(SplitDateTimeResetField, self).__init__(fields, required, 
widget, label, initial)

    def compress(self, data_list):
        print "Compressing: " + `data_list`
        if data_list[0] and data_list[1]:
            return datetime.datetime.combine(*data_list)
        return None


_now_button = """<input type="button" value="Set to now" onClick="
  %(target_name)s_0.value = '%(date)s';
  %(target_name)s_1.value = '%(hour)02d:%(minute)02d';
  "
/>
"""

class SplitDateTimeResetWidget(MultiWidget):
    def __init__(self, attrs=None):
        attrs = attrs or {}

        a0 = attrs.copy(); a0['size'] = 11
        a1 = attrs.copy(); a1['size'] = 6

        widgets = (TextInput(attrs=a0), TextInput(attrs=a1))
        super(SplitDateTimeResetWidget, self).__init__(widgets, attrs)

    def decompress(self, value):
        if value:
            return [value.date(), value.time()]
        else:
            return [None, None]

    def render(self, name, value, attrs=None):
        if not isinstance(value, list):
            value = self.decompress(value)
        output = []
        if not value:
            value = [None, None]
        if isinstance(value[1], datetime.time):
            value[1] = '%02d:%02d' % (value[1].hour, value[1].minute)
        for i, widget in enumerate(self.widgets):
            output.append(self.widgets[i].render(name + '_%d' % (i), value[i], 
attrs))
        now = datetime.datetime.now()
        output.append(_now_button % { 'target_name': name, 'date': 
now.date(), 'hour': now.hour, 'minute': now.minute } )
        return self.format_output(output)

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-users@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to