diff --git a/django/forms/widgets.py b/django/forms/widgets.py
index 217f37b022..ec076398cc 100644
--- a/django/forms/widgets.py
+++ b/django/forms/widgets.py
@@ -693,8 +693,11 @@ class ChoiceFieldRenderer(object):
         self.choices = choices
 
     def __getitem__(self, idx):
-        choice = list(self.choices)[idx]  # Let the IndexError propagate
-        return self.choice_input_class(self.name, self.value, self.attrs.copy(), choice, idx)
+        return list(self)[idx]
+
+    def __iter__(self):
+        for idx, choice in enumerate(self.choices):
+            yield self.choice_input_class(self.name, self.value, self.attrs.copy(), choice, idx)
 
     def __str__(self):
         return self.render()
diff --git a/docs/releases/1.10.1.txt b/docs/releases/1.10.1.txt
index 66ff4707f7..58619492a7 100644
--- a/docs/releases/1.10.1.txt
+++ b/docs/releases/1.10.1.txt
@@ -20,3 +20,6 @@ Bugfixes
 
 * Fixed a checks framework crash with an empty ``Meta.default_permissions``
   (:ticket:`26997`).
+
+* Fixed a regression in the number of queries when using ``RadioSelect`` with a
+  ``ModelChoiceField`` form field (:ticket:`27001`).
diff --git a/tests/model_forms/tests.py b/tests/model_forms/tests.py
index 3d65c104ff..8c706f1a56 100644
--- a/tests/model_forms/tests.py
+++ b/tests/model_forms/tests.py
@@ -1576,6 +1576,14 @@ class ModelChoiceFieldTests(TestCase):
         field = CustomModelChoiceField(Category.objects.all())
         self.assertIsInstance(field.choices, CustomModelChoiceIterator)
 
+    def test_radioselect_num_queries(self):
+        class CategoriesForm(forms.Form):
+            categories = forms.ModelChoiceField(Category.objects.all(), widget=forms.RadioSelect)
+
+        template = Template('{% for widget in form.categories %}{{ widget }}{% endfor %}')
+        with self.assertNumQueries(2):
+            template.render(Context({'form': CategoriesForm()}))
+
 
 class ModelMultipleChoiceFieldTests(TestCase):
     def setUp(self):