I am trying to create my own Dojo-aware Django widgets. I have defined
the following


class DojoDateWidget(forms.widgets.DateTimeInput):
    format = '%Y-%m-%d'

    def __init__(self, *args, **kwargs):
        kwargs.setdefault('attrs', {}).update({'dojoType':
"dijit.form.DateTextBox",
                                              'required': kwargs.pop
('required', False),
                                              'constraints': mark_safe
("{datePattern:'MM/dd/yyyy'}"),
                                              })
        attrs = kwargs['attrs']

        if kwargs.get('promptMessage', None) is not None:
            attrs['promptMessage'] =  kwargs.pop('promptMessage')

        super(DojoDateWidget, self).__init__(*args, **kwargs)



class DojoTimeWidget(forms.TimeInput):

    input_type = 'text'

    def __init__(self, *args, **kwargs):
        kwargs.setdefault('attrs', {}).update({'dojoType':
"dijit.form.TimeTextBox",
                                              'required': kwargs.pop
('required', False),
                                              #'constraints': mark_safe
("{timePattern:'HH:mm'}"),
                                              })
        attrs = kwargs['attrs']

        if kwargs.get('promptMessage', None) is not None:
            attrs['promptMessage'] =  kwargs.pop('promptMessage')

        self.input_formats =  ['T%H:%M:%S']

        super(DojoTimeWidget, self).__init__(*args, **kwargs)


    def render(self, name, value, attrs=None):
        if value is None:
            value = ''
        elif isinstance(value, time):
            value = value.replace(microsecond=0)

        #For Dojo TimeTextBox formatting.
        #Requires T14:30:59 (there's a 'T' in front)
        value = 'T%s' % value

        return super(DojoTimeWidget, self).render(name, value, attrs)



class DojoDateTimeWidget(forms.widgets.MultiWidget):

    def __init__(self, attrs=None):
        widgets = (DojoDateWidget, DojoTimeWidget)
        super(DojoDateTimeWidget, self).__init__(widgets, attrs)

    def decompress(self, value):
        if value:
            return [value.date(), value.time().replace(microsecond=0)]
        return [None, None]



The DojoDateWidget and DojoTimeWidget validate correctly when
submitting in a form. However, when I leave the DojoDateTimeWidget
blank in a form, Django sees the empty values as ['', ''] as opposed
to simply None which causes the form validation to say that the date
time format is invalid. I see that the decompressed null value for the
widget is "return [None, None]" but this is the same as the Django
built-in SplitDateTimeWidget and when I simply return "None" I get the
error message "'NoneType' object is unsubscriptable". How do I get my
datetime widget to correctly send an empty value?

--

You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to [email protected].
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=.


Reply via email to