diff --git a/django/db/models/fields/__init__.py b/django/db/models/fields/__init__.py index 3aabb4497d..0af100efd9 100644 --- a/django/db/models/fields/__init__.py +++ b/django/db/models/fields/__init__.py @@ -879,7 +879,7 @@ class Field(RegisterLookupMixin): for k in list(kwargs): if k not in ('coerce', 'empty_value', 'choices', 'required', 'widget', 'label', 'initial', 'help_text', - 'error_messages', 'show_hidden_initial'): + 'error_messages', 'show_hidden_initial', 'disabled'): del kwargs[k] defaults.update(kwargs) if form_class is None: diff --git a/tests/model_fields/tests.py b/tests/model_fields/tests.py index 5869196335..a9c9794a3c 100644 --- a/tests/model_fields/tests.py +++ b/tests/model_fields/tests.py @@ -54,6 +54,12 @@ class BasicFieldTests(TestCase): klass = forms.TypedMultipleChoiceField self.assertIsInstance(field.formfield(choices_form_class=klass), klass) + def test_formfield_disabled(self): + """Field.formfield() sets disabled for fields with choices.""" + field = models.CharField(choices=[('a', 'b')]) + form_field = field.formfield(disabled=True) + self.assertIs(form_field.disabled, True) + def test_field_str(self): f = models.Field() self.assertEqual(str(f), '')