Fixed #22684 -- Added `empty_label` option on `django.forms.extras.widets.SelectDateWidget`
Thanks danielsamuels for the report
This commit is contained in:
parent
fd427f1fe3
commit
32586b0ba4
1
AUTHORS
1
AUTHORS
|
@ -484,6 +484,7 @@ answer newbie questions, and generally made Django that much better:
|
||||||
oggy <ognjen.maric@gmail.com>
|
oggy <ognjen.maric@gmail.com>
|
||||||
Tomek Paczkowski <tomek@hauru.eu>
|
Tomek Paczkowski <tomek@hauru.eu>
|
||||||
Jens Page
|
Jens Page
|
||||||
|
Guillaume Pannatier <guillaume.pannatier@gmail.com>
|
||||||
Jay Parlar <parlar@gmail.com>
|
Jay Parlar <parlar@gmail.com>
|
||||||
Carlos Eduardo de Paula <carlosedp@gmail.com>
|
Carlos Eduardo de Paula <carlosedp@gmail.com>
|
||||||
John Paulett <john@paulett.org>
|
John Paulett <john@paulett.org>
|
||||||
|
|
|
@ -48,7 +48,7 @@ class SelectDateWidget(Widget):
|
||||||
day_field = '%s_day'
|
day_field = '%s_day'
|
||||||
year_field = '%s_year'
|
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 {}
|
self.attrs = attrs or {}
|
||||||
|
|
||||||
# Optional list or tuple of years to use in the "year" select box.
|
# Optional list or tuple of years to use in the "year" select box.
|
||||||
|
@ -64,6 +64,9 @@ class SelectDateWidget(Widget):
|
||||||
else:
|
else:
|
||||||
self.months = MONTHS
|
self.months = MONTHS
|
||||||
|
|
||||||
|
if empty_label is not None:
|
||||||
|
self.none_value = (0, empty_label)
|
||||||
|
|
||||||
def render(self, name, value, attrs=None):
|
def render(self, name, value, attrs=None):
|
||||||
try:
|
try:
|
||||||
year_val, month_val, day_val = value.year, value.month, value.day
|
year_val, month_val, day_val = value.year, value.month, value.day
|
||||||
|
|
|
@ -781,3 +781,15 @@ Composite widgets
|
||||||
5:_('may'), 6:_('jun'), 7:_('jul'), 8:_('aug'),
|
5:_('may'), 6:_('jun'), 7:_('jul'), 8:_('aug'),
|
||||||
9:_('sep'), 10:_('oct'), 11:_('nov'), 12:_('dec')
|
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"))
|
||||||
|
|
|
@ -136,6 +136,10 @@ Forms
|
||||||
a form's :attr:`~django.forms.Form.label_suffix` while using shortcuts such
|
a form's :attr:`~django.forms.Form.label_suffix` while using shortcuts such
|
||||||
as ``{{ form.as_p }}`` in templates.
|
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
|
Internationalization
|
||||||
^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
|
|
@ -297,6 +297,11 @@ class FormsExtraTestCase(TestCase, AssertFormErrorsMixin):
|
||||||
<option value="2013">2013</option>
|
<option value="2013">2013</option>
|
||||||
</select>""")
|
</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'})
|
a = GetDate({'mydate_month': '4', 'mydate_day': '1', 'mydate_year': '2008'})
|
||||||
self.assertTrue(a.is_valid())
|
self.assertTrue(a.is_valid())
|
||||||
self.assertEqual(a.cleaned_data['mydate'], datetime.date(2008, 4, 1))
|
self.assertEqual(a.cleaned_data['mydate'], datetime.date(2008, 4, 1))
|
||||||
|
|
Loading…
Reference in New Issue