diff --git a/django/forms/models.py b/django/forms/models.py index c8626f57b27..b259a8df288 100644 --- a/django/forms/models.py +++ b/django/forms/models.py @@ -1155,7 +1155,8 @@ class ModelChoiceField(ChoiceField): def __deepcopy__(self, memo): result = super(ChoiceField, self).__deepcopy__(memo) # Need to force a new ModelChoiceIterator to be created, bug #11183 - result.queryset = self.queryset.all() + if self.queryset is not None: + result.queryset = self.queryset.all() return result def _get_queryset(self): diff --git a/tests/model_forms/tests.py b/tests/model_forms/tests.py index aa93038eea0..35091468561 100644 --- a/tests/model_forms/tests.py +++ b/tests/model_forms/tests.py @@ -1640,6 +1640,17 @@ class ModelChoiceFieldTests(TestCase): form2 = ModelChoiceForm() self.assertIsNone(form2.fields['category'].queryset._result_cache) + def test_modelchoicefield_queryset_none(self): + class ModelChoiceForm(forms.Form): + category = forms.ModelChoiceField(queryset=None) + + def __init__(self, *args, **kwargs): + super(ModelChoiceForm, self).__init__(*args, **kwargs) + self.fields['category'].queryset = Category.objects.filter(slug__contains='test') + + form = ModelChoiceForm() + self.assertCountEqual(form.fields['category'].queryset, [self.c2, self.c3]) + def test_modelchoicefield_22745(self): """ #22745 -- Make sure that ModelChoiceField with RadioSelect widget