Commit 32586b0b authored by Guillaume Pannatier's avatar Guillaume Pannatier Committed by Tim Graham
Browse files

Fixed #22684 -- Added `empty_label` option on `django.forms.extras.widets.SelectDateWidget`

Thanks danielsamuels for the report
parent fd427f1f
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -484,6 +484,7 @@ answer newbie questions, and generally made Django that much better:
    oggy <ognjen.maric@gmail.com>
    Tomek Paczkowski <tomek@hauru.eu>
    Jens Page
    Guillaume Pannatier <guillaume.pannatier@gmail.com>
    Jay Parlar <parlar@gmail.com>
    Carlos Eduardo de Paula <carlosedp@gmail.com>
    John Paulett <john@paulett.org>
+4 −1
Original line number Diff line number Diff line
@@ -48,7 +48,7 @@ class SelectDateWidget(Widget):
    day_field = '%s_day'
    year_field = '%s_year'

    def __init__(self, attrs=None, years=None, months=None):
    def __init__(self, attrs=None, years=None, months=None, empty_label=None):
        self.attrs = attrs or {}

        # Optional list or tuple of years to use in the "year" select box.
@@ -64,6 +64,9 @@ class SelectDateWidget(Widget):
        else:
            self.months = MONTHS

        if empty_label is not None:
            self.none_value = (0, empty_label)

    def render(self, name, value, attrs=None):
        try:
            year_val, month_val, day_val = value.year, value.month, value.day
+12 −0
Original line number Diff line number Diff line
@@ -781,3 +781,15 @@ Composite widgets
                5:_('may'), 6:_('jun'), 7:_('jul'), 8:_('aug'),
                9:_('sep'), 10:_('oct'), 11:_('nov'), 12:_('dec')
            }

    .. attribute:: SelectDateWidget.empty_label

        .. versionadded:: 1.8

        If the :class:`~django.forms.DateField` is not required,
        :class:`SelectDateWidget` will have an empty choice at the top of
        the list. You can change the text of this label
        (which is ``---`` by default) with the ``empty_label`` attribute::

            # A custom empty label
            field1 = forms.DateField(widget=SelectDateWidget(empty_label="Nothing"))
+4 −0
Original line number Diff line number Diff line
@@ -136,6 +136,10 @@ Forms
  a form's :attr:`~django.forms.Form.label_suffix` while using  shortcuts such
  as ``{{ form.as_p }}`` in templates.

* :class:`~django.forms.extras.widgets.SelectDateWidget` now accepts an
  :attr:`~django.forms.extras.widgets.SelectDateWidget.empty_label` argument, which will
  override the top list choice label when :class:`~django.forms.DateField` is not required.

Internationalization
^^^^^^^^^^^^^^^^^^^^

+5 −0
Original line number Diff line number Diff line
@@ -297,6 +297,11 @@ class FormsExtraTestCase(TestCase, AssertFormErrorsMixin):
<option value="2013">2013</option>
</select>""")

        w = SelectDateWidget(years=('2014',), empty_label='empty_label')

        # Rendering the default state with empty_label setted.
        self.assertInHTML('<option value="0">empty_label</option>', w.render('mydate', ''), count=3)

        a = GetDate({'mydate_month': '4', 'mydate_day': '1', 'mydate_year': '2008'})
        self.assertTrue(a.is_valid())
        self.assertEqual(a.cleaned_data['mydate'], datetime.date(2008, 4, 1))