2203
2203
with self.assertRaises(ValidationError):
2204
2204
f.fields['status'].clean('z')
2206
def test_prefetch_related_queryset(self):
2208
ModelChoiceField should respect a prefetch_related() on its queryset.
2210
blue = Colour.objects.create(name='blue')
2211
red = Colour.objects.create(name='red')
2212
multicolor_item = ColourfulItem.objects.create()
2213
multicolor_item.colours.add(blue, red)
2214
red_item = ColourfulItem.objects.create()
2215
red_item.colours.add(red)
2217
class ColorModelChoiceField(forms.ModelChoiceField):
2218
def label_from_instance(self, obj):
2219
return ', '.join(c.name for c in obj.colours.all())
2221
field = ColorModelChoiceField(ColourfulItem.objects.prefetch_related('colours'))
2222
with self.assertNumQueries(4): # would be 5 if prefetch is ignored
2223
self.assertEqual(tuple(field.choices), (
2225
(multicolor_item.pk, 'blue, red'),
2226
(red_item.pk, 'red'),
2206
2229
def test_foreignkeys_which_use_to_field(self):
2207
2230
apple = Inventory.objects.create(barcode=86, name='Apple')
2208
2231
Inventory.objects.create(barcode=22, name='Pear')