diff options
| author | Alex | 2013-11-12 23:40:07 +0000 | 
|---|---|---|
| committer | Alex | 2013-11-12 23:40:07 +0000 | 
| commit | d1dc68d7550e90ba56a3122f8de1f38bb5aa1e3a (patch) | |
| tree | 3d2b979ba48b3d943a1b476fab1e40553bf35fe5 /rest_framework/tests | |
| parent | d68700740f052323f731d4bc4b1b17fe9949b029 (diff) | |
| download | django-rest-framework-d1dc68d7550e90ba56a3122f8de1f38bb5aa1e3a.tar.bz2 | |
Add queryset aggregates to allowed fields in OrderingFilter
Diffstat (limited to 'rest_framework/tests')
| -rw-r--r-- | rest_framework/tests/test_filters.py | 39 | 
1 files changed, 39 insertions, 0 deletions
diff --git a/rest_framework/tests/test_filters.py b/rest_framework/tests/test_filters.py index 379db29d..614f45cc 100644 --- a/rest_framework/tests/test_filters.py +++ b/rest_framework/tests/test_filters.py @@ -363,6 +363,12 @@ class OrdringFilterModel(models.Model):      text = models.CharField(max_length=100) +class OrderingFilterRelatedModel(models.Model): +    related_object = models.ForeignKey(OrdringFilterModel, +                                       related_name="relateds") + + +  class OrderingFilterTests(TestCase):      def setUp(self):          # Sequence of title/text is: @@ -472,3 +478,36 @@ class OrderingFilterTests(TestCase):                  {'id': 1, 'title': 'zyx', 'text': 'abc'},              ]          ) + +    def test_ordering_by_aggregate_field(self): +        # create some related models to aggregate order by +        num_objs = [2, 5, 3] +        for obj, num_relateds in zip(OrdringFilterModel.objects.all(), +                                     num_objs): +            for _ in range(num_relateds): +                new_related = OrderingFilterRelatedModel( +                    related_object=obj +                ) +                new_related.save() + +        class OrderingListView(generics.ListAPIView): +            model = OrdringFilterModel +            filter_backends = (filters.OrderingFilter,) +            ordering = 'title' +            queryset = OrdringFilterModel.objects.all().annotate( +                models.Count("relateds")) + +        view = OrderingListView.as_view() +        request = factory.get('?ordering=relateds__count') +        response = view(request) +        self.assertEqual( +            response.data, +            [ +                {'id': 1, 'title': 'zyx', 'text': 'abc'}, +                {'id': 3, 'title': 'xwv', 'text': 'cde'}, +                {'id': 2, 'title': 'yxw', 'text': 'bcd'}, +            ] +        ) + + +  | 
