diff options
| author | David Smith <smithdc@gmail.com> | 2026-03-30 23:16:32 +0100 |
|---|---|---|
| committer | Jacob Walls <jacobtylerwalls@gmail.com> | 2026-04-02 11:10:12 -0400 |
| commit | ea8e293fda0dd1e78f5489efa73e5d19e195b4f0 (patch) | |
| tree | 649ded01c2f1dbe20fc5d848fbe379ca880e81a6 /tests/modeladmin | |
| parent | 1f0abb0595ed806a14695398627fc77052bb6b63 (diff) | |
[6.0.x] Fixed #36949 -- Improved RelatedFieldWidgetWrapper <label>s.
Regression in 4187da258fe212d494cb578a0bc2b52c4979ab95.
Backport of 253f552c5809fa096116b601bd842ca4f3504860 from main.
Diffstat (limited to 'tests/modeladmin')
| -rw-r--r-- | tests/modeladmin/tests.py | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/tests/modeladmin/tests.py b/tests/modeladmin/tests.py index 4a92514e17..c1c8b52346 100644 --- a/tests/modeladmin/tests.py +++ b/tests/modeladmin/tests.py @@ -830,6 +830,55 @@ class ModelAdminTests(TestCase): ["extra", "transport", "id", "DELETE", "main_band"], ) + def test_foreign_key_as_custom_widget(self): + class CustomSelectMultiple(forms.SelectMultiple): + def build_attrs(self, base_attrs, extra_attrs=None): + attrs = super().build_attrs(base_attrs, extra_attrs) + attrs["data-custom-widget"] = "true" + return attrs + + class ConcertAdmin(ModelAdmin): + formfield_overrides = { + models.ForeignKey: {"widget": CustomSelectMultiple}, + } + + cma = ConcertAdmin(Concert, self.site) + cmafa = cma.get_form(request) + expected = ( + '<div><label for="id_main_band">Main band:</label><div ' + 'class="related-widget-wrapper" data-model-ref="band"><select ' + 'name="main_band" data-context="available-source" required ' + 'id="id_main_band" data-custom-widget="true" multiple>' + '<option value="">---------</option><option value="1">The Doors</option>' + "</select></div></div>" + ) + self.assertInHTML(expected, cmafa().render()) + + def test_foreign_key_as_custom_widget_with_fieldset(self): + class CustomSelectMultipleFieldset(forms.RadioSelect): + use_fieldset = True + + def build_attrs(self, base_attrs, extra_attrs=None): + attrs = super().build_attrs(base_attrs, extra_attrs) + attrs["use_fieldset"] = "true" + return attrs + + class ConcertAdmin(ModelAdmin): + formfield_overrides = { + models.ForeignKey: {"widget": CustomSelectMultipleFieldset}, + } + + cma = ConcertAdmin(Concert, self.site) + cmafa = cma.get_form(request) + expected = ( + '<fieldset><legend>Main band:</legend><div class="related-widget-wrapper" ' + 'data-model-ref="band"><div id="id_main_band"><div><label ' + 'for="id_main_band_0"><input type="radio" name="main_band" value="1" ' + 'data-context="available-source" required id="id_main_band_0" ' + 'use_fieldset="true">The Doors</label></div></div></div></fieldset>' + ) + self.assertInHTML(expected, cmafa().render()) + def test_log_actions(self): ma = ModelAdmin(Band, self.site) mock_request = MockRequest() |
