~ubuntuone-pqm-team/django/stable

« back to all changes in this revision

Viewing changes to tests/model_forms/tests.py

  • Committer: Natalia
  • Date: 2015-12-29 23:45:16 UTC
  • Revision ID: natalia.bidart@ubuntu.com-20151229234516-i822kgwc995ia2vk
Imported Django 1.8.7 from released tarball.

Show diffs side-by-side

added added

removed removed

Lines of Context:
2203
2203
        with self.assertRaises(ValidationError):
2204
2204
            f.fields['status'].clean('z')
2205
2205
 
 
2206
    def test_prefetch_related_queryset(self):
 
2207
        """
 
2208
        ModelChoiceField should respect a prefetch_related() on its queryset.
 
2209
        """
 
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)
 
2216
 
 
2217
        class ColorModelChoiceField(forms.ModelChoiceField):
 
2218
            def label_from_instance(self, obj):
 
2219
                return ', '.join(c.name for c in obj.colours.all())
 
2220
 
 
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), (
 
2224
                ('', '---------'),
 
2225
                (multicolor_item.pk, 'blue, red'),
 
2226
                (red_item.pk, 'red'),
 
2227
            ))
 
2228
 
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')