diff options
Diffstat (limited to 'tests/modeladmin/tests.py')
| -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 f50a557d02..2516ca3207 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() |
