From 74105b26365c6e862f347656cc085faf18cc0bb1 Mon Sep 17 00:00:00 2001 From: Alex Hill Date: Wed, 3 Aug 2016 14:18:48 +0800 Subject: Fixed #27002 -- Prevented double query when rendering ModelChoiceField. --- tests/model_forms/tests.py | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) (limited to 'tests/model_forms') diff --git a/tests/model_forms/tests.py b/tests/model_forms/tests.py index 8c706f1a56..085a95733e 100644 --- a/tests/model_forms/tests.py +++ b/tests/model_forms/tests.py @@ -1576,11 +1576,22 @@ class ModelChoiceFieldTests(TestCase): field = CustomModelChoiceField(Category.objects.all()) self.assertIsInstance(field.choices, CustomModelChoiceIterator) - def test_radioselect_num_queries(self): + def test_modelchoicefield_num_queries(self): + """ + Widgets that render multiple subwidgets shouldn't make more than one + database query. + """ + categories = Category.objects.all() + class CategoriesForm(forms.Form): - categories = forms.ModelChoiceField(Category.objects.all(), widget=forms.RadioSelect) + radio = forms.ModelChoiceField(queryset=categories, widget=forms.RadioSelect) + checkbox = forms.ModelMultipleChoiceField(queryset=categories, widget=forms.CheckboxSelectMultiple) + + template = Template(""" + {% for widget in form.checkbox %}{{ widget }}{% endfor %} + {% for widget in form.radio %}{{ widget }}{% endfor %} + """) - template = Template('{% for widget in form.categories %}{{ widget }}{% endfor %}') with self.assertNumQueries(2): template.render(Context({'form': CategoriesForm()})) -- cgit v1.3