Skip to content

Commit d87f2bc

Browse files
charettestomchristie
authored andcommitted
OrderingFilter adjustements (#3983)
* Made sure the OrderingFilter relies on Field.verbose_name. * Marked OrderingFilter's order labels for translation.
1 parent 95418eb commit d87f2bc

File tree

2 files changed

+17
-5
lines changed

2 files changed

+17
-5
lines changed

rest_framework/filters.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -240,8 +240,7 @@ def get_valid_fields(self, queryset, view):
240240
elif valid_fields == '__all__':
241241
# View explicitly allows filtering on any model field
242242
valid_fields = [
243-
(field.name, getattr(field, 'label', field.name.title()))
244-
for field in queryset.model._meta.fields
243+
(field.name, field.verbose_name) for field in queryset.model._meta.fields
245244
]
246245
valid_fields += [
247246
(key, key.title().split('__'))
@@ -272,8 +271,8 @@ def get_template_context(self, request, queryset, view):
272271
current = None if current is None else current[0]
273272
options = []
274273
for key, label in self.get_valid_fields(queryset, view):
275-
options.append((key, '%s - ascending' % label))
276-
options.append(('-' + key, '%s - descending' % label))
274+
options.append((key, '%s - %s' % (label, _('ascending'))))
275+
options.append(('-' + key, '%s - %s' % (label, _('descending'))))
277276
return {
278277
'request': request,
279278
'current': current,

tests/test_filters.py

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -499,7 +499,7 @@ class SearchListView(generics.ListAPIView):
499499

500500

501501
class OrderingFilterModel(models.Model):
502-
title = models.CharField(max_length=20)
502+
title = models.CharField(max_length=20, verbose_name='verbose title')
503503
text = models.CharField(max_length=100)
504504

505505

@@ -741,6 +741,19 @@ class OrderingListView(generics.ListAPIView):
741741

742742
reload_module(filters)
743743

744+
def test_get_template_context(self):
745+
class OrderingListView(generics.ListAPIView):
746+
ordering_fields = '__all__'
747+
serializer_class = OrderingFilterSerializer
748+
queryset = OrderingFilterModel.objects.all()
749+
filter_backends = (filters.OrderingFilter,)
750+
751+
request = factory.get('/', {'ordering': 'title'}, HTTP_ACCEPT='text/html')
752+
view = OrderingListView.as_view()
753+
response = view(request)
754+
755+
self.assertContains(response, 'verbose title')
756+
744757

745758
class SensitiveOrderingFilterModel(models.Model):
746759
username = models.CharField(max_length=20)

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy