Prechádzať zdrojové kódy

Fixed #33235 -- Removed "for = ..." from MultiWidget's <label>.

This improves accessibility for screen reader users.
David Smith 3 rokov pred
rodič
commit
c6c6cd3c5a

+ 1 - 3
django/forms/widgets.py

@@ -849,9 +849,7 @@ class MultiWidget(Widget):
         return context
 
     def id_for_label(self, id_):
-        if id_:
-            id_ += '_0'
-        return id_
+        return ''
 
     def value_from_datadict(self, data, files, name):
         return [

+ 2 - 2
tests/forms_tests/field_tests/test_multivaluefield.py

@@ -141,7 +141,7 @@ class MultiValueFieldTest(SimpleTestCase):
         self.assertHTMLEqual(
             form.as_table(),
             """
-            <tr><th><label for="id_field1_0">Field1:</label></th>
+            <tr><th><label>Field1:</label></th>
             <td><input type="text" name="field1_0" id="id_field1_0" required>
             <select multiple name="field1_1" id="id_field1_1" required>
             <option value="J">John</option>
@@ -164,7 +164,7 @@ class MultiValueFieldTest(SimpleTestCase):
         self.assertHTMLEqual(
             form.as_table(),
             """
-            <tr><th><label for="id_field1_0">Field1:</label></th>
+            <tr><th><label>Field1:</label></th>
             <td><input type="text" name="field1_0" value="some text" id="id_field1_0" required>
             <select multiple name="field1_1" id="id_field1_1" required>
             <option value="J" selected>John</option>

+ 14 - 1
tests/forms_tests/field_tests/test_splitdatetimefield.py

@@ -1,7 +1,7 @@
 import datetime
 
 from django.core.exceptions import ValidationError
-from django.forms import SplitDateTimeField
+from django.forms import Form, SplitDateTimeField
 from django.forms.widgets import SplitDateTimeWidget
 from django.test import SimpleTestCase
 
@@ -60,3 +60,16 @@ class SplitDateTimeFieldTest(SimpleTestCase):
         self.assertTrue(f.has_changed(datetime.datetime(2008, 5, 6, 12, 40, 00), ['2008-05-06', '12:40:00']))
         self.assertFalse(f.has_changed(datetime.datetime(2008, 5, 6, 12, 40, 00), ['06/05/2008', '12:40']))
         self.assertTrue(f.has_changed(datetime.datetime(2008, 5, 6, 12, 40, 00), ['06/05/2008', '12:41']))
+
+    def test_form_as_table(self):
+        class TestForm(Form):
+            datetime = SplitDateTimeField()
+
+        f = TestForm()
+        self.assertHTMLEqual(
+            f.as_table(),
+            '<tr><th><label>Datetime:</label></th><td>'
+            '<input type="text" name="datetime_0" required id="id_datetime_0">'
+            '<input type="text" name="datetime_1" required id="id_datetime_1">'
+            '</td></tr>',
+        )

+ 4 - 4
tests/postgres_tests/test_ranges.py

@@ -665,7 +665,7 @@ class TestFormField(PostgreSQLSimpleTestCase):
         self.assertHTMLEqual(str(form), '''
             <tr>
                 <th>
-                <label for="id_field_0">Field:</label>
+                <label>Field:</label>
                 </th>
                 <td>
                     <input id="id_field_0_0" name="field_0_0" type="text">
@@ -700,7 +700,7 @@ class TestFormField(PostgreSQLSimpleTestCase):
             form.as_table(),
             """
             <tr><th>
-            <label for="id_datetime_field_0">Datetime field:</label>
+            <label>Datetime field:</label>
             </th><td>
             <input type="text" name="datetime_field_0" id="id_datetime_field_0">
             <input type="text" name="datetime_field_1" id="id_datetime_field_1">
@@ -717,7 +717,7 @@ class TestFormField(PostgreSQLSimpleTestCase):
             form.as_table(),
             """
             <tr><th>
-            <label for="id_datetime_field_0">Datetime field:</label>
+            <label>Datetime field:</label>
             </th><td>
             <input type="text" name="datetime_field_0"
             value="2010-01-01 11:13:00" id="id_datetime_field_0">
@@ -754,7 +754,7 @@ class TestFormField(PostgreSQLSimpleTestCase):
 
         self.assertHTMLEqual(str(RangeForm()), '''
         <tr>
-            <th><label for="id_ints_0">Ints:</label></th>
+            <th><label>Ints:</label></th>
             <td>
                 <input id="id_ints_0" name="ints_0" type="number">
                 <input id="id_ints_1" name="ints_1" type="number">