From c832885a3e8659d4a704bf103d523b610c24e4ec Mon Sep 17 00:00:00 2001 From: mackong Date: Sat, 18 Aug 2018 22:16:22 +0800 Subject: [PATCH] Fixed #29426 -- Made UUID inputs in the admin match the width of a UUID. --- django/contrib/admin/options.py | 1 + django/contrib/admin/static/admin/css/forms.css | 2 +- django/contrib/admin/widgets.py | 5 +++++ tests/admin_widgets/tests.py | 14 ++++++++++++++ 4 files changed, 21 insertions(+), 1 deletion(-) diff --git a/django/contrib/admin/options.py b/django/contrib/admin/options.py index 474c4226f8..0617ab91a8 100644 --- a/django/contrib/admin/options.py +++ b/django/contrib/admin/options.py @@ -92,6 +92,7 @@ FORMFIELD_FOR_DBFIELD_DEFAULTS = { models.ImageField: {'widget': widgets.AdminFileWidget}, models.FileField: {'widget': widgets.AdminFileWidget}, models.EmailField: {'widget': widgets.AdminEmailInputWidget}, + models.UUIDField: {'widget': widgets.AdminUUIDInputWidget}, } csrf_protect_m = method_decorator(csrf_protect) diff --git a/django/contrib/admin/static/admin/css/forms.css b/django/contrib/admin/static/admin/css/forms.css index 5db927d6cf..62a093f952 100644 --- a/django/contrib/admin/static/admin/css/forms.css +++ b/django/contrib/admin/static/admin/css/forms.css @@ -353,7 +353,7 @@ body.popup .submit-row { width: 2.2em; } -.vTextField { +.vTextField, .vUUIDField { width: 20em; } diff --git a/django/contrib/admin/widgets.py b/django/contrib/admin/widgets.py index 835e653ba6..32a1900cb1 100644 --- a/django/contrib/admin/widgets.py +++ b/django/contrib/admin/widgets.py @@ -351,6 +351,11 @@ class AdminBigIntegerFieldWidget(AdminIntegerFieldWidget): class_name = 'vBigIntegerField' +class AdminUUIDInputWidget(forms.TextInput): + def __init__(self, attrs=None): + super().__init__(attrs={'class': 'vUUIDField', **(attrs or {})}) + + # Mapping of lower case language codes [returned by Django's get_language()] # to language codes supported by select2. # See django/contrib/admin/static/admin/js/vendor/select2/i18n/* diff --git a/tests/admin_widgets/tests.py b/tests/admin_widgets/tests.py index 43cf9f4182..f7c2a7865c 100644 --- a/tests/admin_widgets/tests.py +++ b/tests/admin_widgets/tests.py @@ -408,6 +408,20 @@ class AdminURLWidgetTest(SimpleTestCase): ) +class AdminUUIDWidgetTests(SimpleTestCase): + def test_attrs(self): + w = widgets.AdminUUIDInputWidget() + self.assertHTMLEqual( + w.render('test', '550e8400-e29b-41d4-a716-446655440000'), + '', + ) + w = widgets.AdminUUIDInputWidget(attrs={'class': 'myUUIDInput'}) + self.assertHTMLEqual( + w.render('test', '550e8400-e29b-41d4-a716-446655440000'), + '', + ) + + @override_settings(ROOT_URLCONF='admin_widgets.urls') class AdminFileWidgetTests(TestDataMixin, TestCase):