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

+3-4
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

+14-1
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)