Opened 101 minutes ago
Last modified 97 minutes ago
#36949 assigned Bug
Missing label on each <select> in a fieldset
| Reported by: | Jacob Walls | Owned by: | Eliana Rosselli |
|---|---|---|---|
| Component: | Forms | Version: | 6.0 |
| Severity: | Normal | Keywords: | accessibility, fieldset |
| Cc: | Antoliny, Thibaud Colas | Triage Stage: | Unreviewed |
| Has patch: | no | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description
As Thibaud mentioned here when use_fieldset was added to forms, we're lacking a label on each <select> element in a <fieldset>, even though a <legend> is present for the fieldset.
Now that the admin uses Widget.use_fieldset since #35892, it's easy to reproduce by just checking a ForeignKey field in the admin:
Then, in Chrome Dev Tools, the lighthouse tab reports:
Select elements do not have associated label elements.
Pure forms reproducer, in a shell:
from django.db import models from django import forms class Person(models.Model): best_friend = models.ForeignKey( "auth.User", models.CASCADE, ) class Meta: app_label = "myapp.Person" class MyWidget(forms.Select): use_fieldset = True class PersonForm(forms.ModelForm): class Meta: model = Person fields = ["best_friend"] widgets = {"best_friend": MyWidget} print(PersonForm().as_p())
<p> <label for="id_best_friend">Best friend:</label> <select name="best_friend" required id="id_best_friend"> <option value="" selected>---------</option> <option value="2">anonymous</option> <option value="1">admin</option> </select> </p>
Tentatively assigning to Eli as a Djangonaut Space navigator to evaluate if a good fit for anyone.
There's some relevant advice in a related ticket: ticket:36509#comment:1