diff options
| author | Tim Graham <timograham@gmail.com> | 2015-10-05 18:21:56 -0400 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2015-10-05 19:19:09 -0400 |
| commit | 6bc8bdf55ae71482ee3cd6c1ab157404c2e4ec5c (patch) | |
| tree | 2dac9d9e3462becd63a22458621362b021d7fa9f /tests/model_forms/tests.py | |
| parent | 3429dfe11df8c7ac59255320c6d34609570345c3 (diff) | |
[1.9.x] Fixed #25496 -- Made ModelChoiceField respect prefetch_related().
Backport of 6afa6818fcf25665bbf61f0921c8c8c6fa8f223e from master
Diffstat (limited to 'tests/model_forms/tests.py')
| -rw-r--r-- | tests/model_forms/tests.py | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/tests/model_forms/tests.py b/tests/model_forms/tests.py index 98b9c1ad52..12401759bd 100644 --- a/tests/model_forms/tests.py +++ b/tests/model_forms/tests.py @@ -2285,6 +2285,29 @@ class OtherModelFormTests(TestCase): with self.assertRaises(ValidationError): f.fields['status'].clean('z') + def test_prefetch_related_queryset(self): + """ + ModelChoiceField should respect a prefetch_related() on its queryset. + """ + blue = Colour.objects.create(name='blue') + red = Colour.objects.create(name='red') + multicolor_item = ColourfulItem.objects.create() + multicolor_item.colours.add(blue, red) + red_item = ColourfulItem.objects.create() + red_item.colours.add(red) + + class ColorModelChoiceField(forms.ModelChoiceField): + def label_from_instance(self, obj): + return ', '.join(c.name for c in obj.colours.all()) + + field = ColorModelChoiceField(ColourfulItem.objects.prefetch_related('colours')) + with self.assertNumQueries(4): # would be 5 if prefetch is ignored + self.assertEqual(tuple(field.choices), ( + ('', '---------'), + (multicolor_item.pk, 'blue, red'), + (red_item.pk, 'red'), + )) + def test_foreignkeys_which_use_to_field(self): apple = Inventory.objects.create(barcode=86, name='Apple') Inventory.objects.create(barcode=22, name='Pear') |
