Author: russellm Date: 2010-04-28 10:39:26 -0500 (Wed, 28 Apr 2010) New Revision: 13041
Modified: django/trunk/django/forms/extras/widgets.py django/trunk/tests/regressiontests/forms/extra.py Log: Fixed #12986 -- Ensured that SelectDateField repopulates correctly when USE_L10N=True and locale has a default date input format other than %Y-%m-%d. Thanks to w...@go2people.nl for the report, and walteralini for his draft patch. Modified: django/trunk/django/forms/extras/widgets.py =================================================================== --- django/trunk/django/forms/extras/widgets.py 2010-04-28 12:08:30 UTC (rev 13040) +++ django/trunk/django/forms/extras/widgets.py 2010-04-28 15:39:26 UTC (rev 13041) @@ -43,10 +43,17 @@ except AttributeError: year_val = month_val = day_val = None if isinstance(value, basestring): - match = RE_DATE.match(value) - if match: - year_val, month_val, day_val = [int(v) for v in match.groups()] - + if settings.USE_L10N: + try: + input_format = get_format('DATE_INPUT_FORMATS')[0] + v = datetime.datetime.strptime(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()] choices = [(i, i) for i in self.years] year_html = self.create_select(name, self.year_field, value, year_val, choices) choices = MONTHS.items() @@ -98,7 +105,7 @@ id_ = self.attrs['id'] else: id_ = 'id_%s' % name - if not (self.required and value): + if not (self.required and val): choices.insert(0, self.none_value) local_attrs = self.build_attrs(id=field % id_) s = Select(choices=choices) Modified: django/trunk/tests/regressiontests/forms/extra.py =================================================================== --- django/trunk/tests/regressiontests/forms/extra.py 2010-04-28 12:08:30 UTC (rev 13040) +++ django/trunk/tests/regressiontests/forms/extra.py 2010-04-28 15:39:26 UTC (rev 13041) @@ -364,6 +364,82 @@ 2008-04-01 +USE_L10N tests + +>>> from django.utils import translation +>>> translation.activate('nl') +>>> from django.conf import settings +>>> settings.USE_L10N=True + +>>> w.value_from_datadict({'date_year': '2010', 'date_month': '8', 'date_day': '13'}, {}, 'date') +'13-08-2010' + +>>> print w.render('date', '13-08-2010') +<select name="date_day" id="id_date_day"> +<option value="0">---</option> +<option value="1">1</option> +<option value="2">2</option> +<option value="3">3</option> +<option value="4">4</option> +<option value="5">5</option> +<option value="6">6</option> +<option value="7">7</option> +<option value="8">8</option> +<option value="9">9</option> +<option value="10">10</option> +<option value="11">11</option> +<option value="12">12</option> +<option value="13" selected="selected">13</option> +<option value="14">14</option> +<option value="15">15</option> +<option value="16">16</option> +<option value="17">17</option> +<option value="18">18</option> +<option value="19">19</option> +<option value="20">20</option> +<option value="21">21</option> +<option value="22">22</option> +<option value="23">23</option> +<option value="24">24</option> +<option value="25">25</option> +<option value="26">26</option> +<option value="27">27</option> +<option value="28">28</option> +<option value="29">29</option> +<option value="30">30</option> +<option value="31">31</option> +</select> +<select name="date_month" id="id_date_month"> +<option value="0">---</option> +<option value="1">januari</option> +<option value="2">februari</option> +<option value="3">maart</option> +<option value="4">april</option> +<option value="5">mei</option> +<option value="6">juni</option> +<option value="7">juli</option> +<option value="8" selected="selected">augustus</option> +<option value="9">september</option> +<option value="10">oktober</option> +<option value="11">november</option> +<option value="12">december</option> +</select> +<select name="date_year" id="id_date_year"> +<option value="0">---</option> +<option value="2007">2007</option> +<option value="2008">2008</option> +<option value="2009">2009</option> +<option value="2010" selected="selected">2010</option> +<option value="2011">2011</option> +<option value="2012">2012</option> +<option value="2013">2013</option> +<option value="2014">2014</option> +<option value="2015">2015</option> +<option value="2016">2016</option> +</select> + +>>> translation.deactivate() + # MultiWidget and MultiValueField ############################################# # MultiWidgets are widgets composed of other widgets. They are usually # combined with MultiValueFields - a field that is composed of other fields. -- You received this message because you are subscribed to the Google Groups "Django updates" group. To post to this group, send email to django-upda...@googlegroups.com. To unsubscribe from this group, send email to django-updates+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/django-updates?hl=en.