Ejemplo n.º 1
0
    def render(self, name, value, attrs=None):
        try:
            year_val, month_val = value.year, value.month
        except AttributeError:
            year_val = month_val = None
            if isinstance(value, basestring):
                if settings.USE_L10N:
                    try:
                        input_format = get_format('DATE_INPUT_FORMATS')[0]
                        # Python 2.4 compatibility:
                        #     v = datetime.datetime.strptime(value, input_format)
                        # would be clearer, but datetime.strptime was added in
                        # Python 2.5
                        v = datetime.datetime(*(time.strptime(value, input_format)[0:6]))
                        year_val, month_val = v.year, v.month
                    except ValueError:
                        pass
                else:
                    match = RE_DATE.match(value)
                    if match:
                        year_val, month_val, day_val = [int(v) for v in match.groups()]
        choices = [(i, i) for i in self.years]
        year_html = self.create_select(name, self.year_field, value, year_val,
                                       choices, none_value=(0, _('Year')))
        choices = [(i, '%02d' % i) for i in range(1,13)]
        month_html = self.create_select(name, self.month_field, value, month_val,
                                        choices, none_value=(0, _('Month')))

        output = []
        for field in _parse_date_fmt():
            if field == 'year':
                output.append(year_html)
            elif field == 'month':
                output.append(month_html)
        return mark_safe(u'\n'.join(output))
Ejemplo n.º 2
0
 def id_for_label(self, id_):
     first_select = None
     field_list = _parse_date_fmt()
     if field_list:
         first_select = field_list[0]
     if first_select is not None:
         return '%s_%s' % (id_, first_select)
     else:
         return '%s_month' % id_
Ejemplo n.º 3
0
    def render(self, name, value, attrs=None):
        """
        Duplicates SelectDateWidget, creating a hidden field rather than
        a select input for year value.
        """
        try:
            year_val, month_val, day_val = value.year, value.month, value.day
        except AttributeError:
            year_val = month_val = day_val = None
            if isinstance(value, six.string_types):
                if settings.USE_L10N:
                    try:
                        input_format = get_format('DATE_INPUT_FORMATS')[0]
                        v = datetime.datetime.strptime(force_str(value), input_format)
                        year_val, month_val, day_val = v.year, v.month, v.day
                    except ValueError:
                        pass
                else:
                    match = RE_DATE.match(value)
                    if match:
                        year_val, month_val, day_val = [int(v) for v in match.groups()]

        year_html = self.create_hidden(name, self.year_field, '1900')

        choices = list(six.iteritems(MONTHS))
        month_html = self.create_select(name, self.month_field, value, month_val, choices)

        choices = [(i, i) for i in range(1, 32)]
        day_html = self.create_select(name, self.day_field, value, day_val,  choices)

        output = []
        for field in _parse_date_fmt():
            if field == 'year':
                output.append(year_html)
            elif field == 'month':
                output.append(month_html)
            elif field == 'day':
                output.append(day_html)

        return mark_safe('\n'.join(output))