This reverts commit f038214d91
.
The initial issue was incorrect. Django 2.2, and before, did not
generate invalid HTML as reported. With f03821 in place invalid HTML
was generated.
Thanks to Kevin Brown for follow-up report and investigation.
This commit is contained in:
parent
664c98f1f8
commit
ee4a19053a
|
@ -979,11 +979,7 @@ class SelectDateWidget(Widget):
|
||||||
date_context['year'] = self.select_widget(attrs, choices=year_choices).get_context(
|
date_context['year'] = self.select_widget(attrs, choices=year_choices).get_context(
|
||||||
name=year_name,
|
name=year_name,
|
||||||
value=context['widget']['value']['year'],
|
value=context['widget']['value']['year'],
|
||||||
attrs={
|
attrs={**context['widget']['attrs'], 'id': 'id_%s' % year_name},
|
||||||
**context['widget']['attrs'],
|
|
||||||
'id': 'id_%s' % year_name,
|
|
||||||
'placeholder': _('Year') if self.is_required else False,
|
|
||||||
},
|
|
||||||
)
|
)
|
||||||
month_choices = list(self.months.items())
|
month_choices = list(self.months.items())
|
||||||
if not self.is_required:
|
if not self.is_required:
|
||||||
|
@ -992,11 +988,7 @@ class SelectDateWidget(Widget):
|
||||||
date_context['month'] = self.select_widget(attrs, choices=month_choices).get_context(
|
date_context['month'] = self.select_widget(attrs, choices=month_choices).get_context(
|
||||||
name=month_name,
|
name=month_name,
|
||||||
value=context['widget']['value']['month'],
|
value=context['widget']['value']['month'],
|
||||||
attrs={
|
attrs={**context['widget']['attrs'], 'id': 'id_%s' % month_name},
|
||||||
**context['widget']['attrs'],
|
|
||||||
'id': 'id_%s' % month_name,
|
|
||||||
'placeholder': _('Month') if self.is_required else False,
|
|
||||||
},
|
|
||||||
)
|
)
|
||||||
day_choices = [(i, i) for i in range(1, 32)]
|
day_choices = [(i, i) for i in range(1, 32)]
|
||||||
if not self.is_required:
|
if not self.is_required:
|
||||||
|
@ -1005,11 +997,7 @@ class SelectDateWidget(Widget):
|
||||||
date_context['day'] = self.select_widget(attrs, choices=day_choices,).get_context(
|
date_context['day'] = self.select_widget(attrs, choices=day_choices,).get_context(
|
||||||
name=day_name,
|
name=day_name,
|
||||||
value=context['widget']['value']['day'],
|
value=context['widget']['value']['day'],
|
||||||
attrs={
|
attrs={**context['widget']['attrs'], 'id': 'id_%s' % day_name},
|
||||||
**context['widget']['attrs'],
|
|
||||||
'id': 'id_%s' % day_name,
|
|
||||||
'placeholder': _('Day') if self.is_required else False,
|
|
||||||
},
|
|
||||||
)
|
)
|
||||||
subwidgets = []
|
subwidgets = []
|
||||||
for field in self._parse_date_fmt():
|
for field in self._parse_date_fmt():
|
||||||
|
|
|
@ -524,10 +524,6 @@ Miscellaneous
|
||||||
|
|
||||||
* Support for ``pywatchman`` < 1.2.0 is removed.
|
* Support for ``pywatchman`` < 1.2.0 is removed.
|
||||||
|
|
||||||
* HTML rendered by :class:`~django.forms.SelectDateWidget` for required fields
|
|
||||||
now have the ``placeholder`` attribute, which, mainly, may require some
|
|
||||||
adjustments in tests that compare HTML.
|
|
||||||
|
|
||||||
* :func:`~django.utils.http.urlencode` now encodes iterable values as they are
|
* :func:`~django.utils.http.urlencode` now encodes iterable values as they are
|
||||||
when ``doseq=False``, rather than iterating them, bringing it into line with
|
when ``doseq=False``, rather than iterating them, bringing it into line with
|
||||||
the standard library :func:`urllib.parse.urlencode` function.
|
the standard library :func:`urllib.parse.urlencode` function.
|
||||||
|
|
|
@ -314,46 +314,6 @@ class SelectDateWidgetTest(WidgetTest):
|
||||||
self.assertFalse(GetNotRequiredDate().fields['mydate'].widget.is_required)
|
self.assertFalse(GetNotRequiredDate().fields['mydate'].widget.is_required)
|
||||||
self.assertTrue(GetRequiredDate().fields['mydate'].widget.is_required)
|
self.assertTrue(GetRequiredDate().fields['mydate'].widget.is_required)
|
||||||
|
|
||||||
def test_selectdate_required_placeholder(self):
|
|
||||||
for required in (True, False):
|
|
||||||
field = DateField(widget=SelectDateWidget(years=('2018', '2019')), required=required)
|
|
||||||
self.check_html(field.widget, 'my_date', '', html=(
|
|
||||||
"""
|
|
||||||
<select name="my_date_month" id="id_my_date_month" %(m_placeholder)s>
|
|
||||||
%(empty)s
|
|
||||||
<option value="1">January</option>
|
|
||||||
<option value="2">February</option>
|
|
||||||
<option value="3">March</option>
|
|
||||||
<option value="4">April</option>
|
|
||||||
<option value="5">May</option>
|
|
||||||
<option value="6">June</option>
|
|
||||||
<option value="7">July</option>
|
|
||||||
<option value="8">August</option>
|
|
||||||
<option value="9">September</option>
|
|
||||||
<option value="10">October</option>
|
|
||||||
<option value="11">November</option>
|
|
||||||
<option value="12">December</option>
|
|
||||||
</select>
|
|
||||||
<select name="my_date_day" id="id_my_date_day" %(d_placeholder)s>
|
|
||||||
%(empty)s
|
|
||||||
%(days_options)s
|
|
||||||
</select>
|
|
||||||
<select name="my_date_year" id="id_my_date_year" %(y_placeholder)s>
|
|
||||||
%(empty)s
|
|
||||||
<option value="2018">2018</option>
|
|
||||||
<option value="2019">2019</option>
|
|
||||||
</select>
|
|
||||||
""" % {
|
|
||||||
'days_options': '\n'.join(
|
|
||||||
'<option value="%s">%s</option>' % (i, i) for i in range(1, 32)
|
|
||||||
),
|
|
||||||
'm_placeholder': 'placeholder="Month"' if required else '',
|
|
||||||
'd_placeholder': 'placeholder="Day"' if required else '',
|
|
||||||
'y_placeholder': 'placeholder="Year"' if required else '',
|
|
||||||
'empty': '' if required else '<option selected value="">---</option>',
|
|
||||||
}
|
|
||||||
))
|
|
||||||
|
|
||||||
def test_selectdate_empty_label(self):
|
def test_selectdate_empty_label(self):
|
||||||
w = SelectDateWidget(years=('2014',), empty_label='empty_label')
|
w = SelectDateWidget(years=('2014',), empty_label='empty_label')
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue