[1.10.x] Fixed #27001 -- Fixed a query count regression in ModelChoiceField with RadioSelect.
Backport of c5ebfda002
from master
This commit is contained in:
parent
a8b8ef114d
commit
86ae2b22ae
|
@ -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()
|
||||
|
|
|
@ -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`).
|
||||
|
|
|
@ -1539,6 +1539,14 @@ class ModelChoiceFieldTests(TestCase):
|
|||
self.assertEqual(form.errors, {})
|
||||
self.assertEqual([x.pk for x in form.cleaned_data['categories']], [category1.pk])
|
||||
|
||||
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):
|
||||
|
|
Loading…
Reference in New Issue