From 6963564ecc1b84cb2510616123a27d368bc76a1f Mon Sep 17 00:00:00 2001
From: James Beith <james@beith.co.uk>
Date: Wed, 22 Mar 2017 16:38:16 +1100
Subject: [PATCH] [1.11.x] Fixed #27975 -- Fixed crash if ModelChoiceField's
 queryset=None.

Regression in 9153d8fbd6385db9f48793662de789fc3d686841.

Backport of 216bb2e8fbc3cb37615bbd70edaa73287acdca81 from master
---
 django/forms/models.py     |  3 ++-
 tests/model_forms/tests.py | 11 +++++++++++
 2 files changed, 13 insertions(+), 1 deletion(-)

diff --git a/django/forms/models.py b/django/forms/models.py
index de0ab6c28d..af324c2b27 100644
--- a/django/forms/models.py
+++ b/django/forms/models.py
@@ -1165,7 +1165,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 2ff4435385..c8d22db6e8 100644
--- a/tests/model_forms/tests.py
+++ b/tests/model_forms/tests.py
@@ -1646,6 +1646,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