summaryrefslogtreecommitdiff
path: root/tests/modeladmin/tests.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/modeladmin/tests.py')
-rw-r--r--tests/modeladmin/tests.py49
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()