summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--django/forms/models.py3
-rw-r--r--tests/model_forms/tests.py11
2 files changed, 13 insertions, 1 deletions
diff --git a/django/forms/models.py b/django/forms/models.py
index c8626f57b2..b259a8df28 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 aa93038eea..3509146856 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