def test_nested_prefetch_by_string(self):
        q = FastQuery(Location.objects.filter(pk=1))
        q.prefetch_related('user_set__groups')
        out = list(q)

        self.assertTrue('user_set' in out[0])
        self.assertTrue('groups' in out[0]['user_set'][0])
示例#2
0
 def test_get_with_prefetch(self):
     # FastQuery.get() should apply prefetch filters correctly
     self.assertTrue(Cat.objects.filter(home=1, backup_home=3).exists())
     q = FastQuery(Location.objects.all())
     q.prefetch_related(
         FastPrefetch('friendly_cats', Cat.objects.filter(home__gt=1)))
     obj = q.get(pk=3)
     self.assertEquals(0, obj.friendly_cats.count())
    def test_m2m_prefetch(self):
        with self.assertNumQueries(3):
            q = FastQuery(User.objects.all())
            q.prefetch_related(FastPrefetch('groups', Group.objects.all()))
            result = q.execute()

        self.assertTrue(all([_['groups'] for _ in result]))
        self.assertTrue(isinstance(result[0]['groups'], list))
        self.assertEquals(set(['id', 'name']),
                          set(result[0]['groups'][0].keys()))
    def test_fk_prefetch(self):
        with self.assertNumQueries(2):
            q = FastQuery(User.objects.all())
            q.prefetch_related(FastPrefetch('location',
                                            Location.objects.all()))
            result = q.execute()

        self.assertTrue(all([_['location'] for _ in result]))
        self.assertEquals(set(['blob', 'id', 'name']),
                          set(result[0]['location'].keys()))
    def test_m2o_prefetch(self):
        with self.assertNumQueries(2):
            q = FastQuery(Location.objects.all())
            q.prefetch_related(FastPrefetch('user_set', User.objects.all()))
            result = q.execute()

        self.assertTrue(all(['user_set' in obj for obj in result]))
        location = six.next(
            (o for o in result if o['user_set'] and len(o['user_set']) > 1))

        self.assertIsNotNone(location)
        self.assertEquals(self._user_keys(),
                          set(location['user_set'][0].keys()))
    def test_o2o_prefetch(self):
        # Create profiles
        for i in range(1, 4):
            Profile.objects.create(user=User.objects.get(pk=i),
                                   display_name='User %s' % i)

        with self.assertNumQueries(2):
            q = FastQuery(Profile.objects.all())
            q.prefetch_related(FastPrefetch('user', User.objects.all()))
            result = q.execute()

        self.assertTrue(all([_['user'] for _ in result]))
        self.assertEquals(self._user_keys(), set(result[0]['user'].keys()))
    def test_pagination(self):
        r = list(FastQuery(User.objects.all()))
        self.assertTrue(isinstance(r, list))

        r = FastQuery(User.objects.order_by('id'))[1]
        self.assertEquals(1, len(r))
        self.assertEquals(r[0]['id'], 2)

        r = FastQuery(User.objects.order_by('id'))[1:3]
        self.assertEquals(2, len(r))
        self.assertEquals(r[0]['id'], 2)
        self.assertEquals(r[1]['id'], 3)

        with self.assertRaises(TypeError):
            FastQuery(User.objects.all())[:10:2]
    def test_reverse_o2o_prefetch(self):
        # Create profiles
        for i in range(1, 4):
            Profile.objects.create(user=User.objects.get(pk=i),
                                   display_name='User %s' % i)

        with self.assertNumQueries(2):
            q = FastQuery(User.objects.all())
            q.prefetch_related(FastPrefetch('profile', Profile.objects.all()))
            result = q.execute()

        self.assertTrue(all(['profile' in _ for _ in result]))
        user = sorted(result, key=lambda x: 1
                      if x['profile'] is None else 0)[0]
        self.assertEquals(
            set(['display_name', 'user_id', 'id', 'thumbnail_url']),
            set(user['profile'].keys()))
示例#9
0
    def _get_queryset(self, queryset=None, serializer=None):
        queryset = super(FastDynamicFilterBackend,
                         self)._get_queryset(queryset=queryset,
                                             serializer=serializer)

        if not isinstance(queryset, FastQuery):
            queryset = FastQuery(queryset)

        return queryset
示例#10
0
 def _make_model_queryset(self, model):
     queryset = super(FastDynamicFilterBackend,
                      self)._make_model_queryset(model)
     return FastQuery(queryset)