mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-08-08 06:14:47 +03:00
Raise ImproperlyConfigured when missing serializer_class
get_serializer_class raises an AssertionError if no serializer_class is found (either as a class attribute or from an overriding method). This commit catches it and raises ImproperlyConfigured instead.
This commit is contained in:
parent
af22135abb
commit
bf498b293e
|
@ -227,14 +227,14 @@ class OrderingFilter(BaseFilterBackend):
|
||||||
|
|
||||||
if valid_fields is None:
|
if valid_fields is None:
|
||||||
# Default to allowing filtering on serializer fields
|
# Default to allowing filtering on serializer fields
|
||||||
serializer_class = getattr(view, 'serializer_class')
|
try:
|
||||||
if serializer_class is None:
|
|
||||||
serializer_class = view.get_serializer_class()
|
serializer_class = view.get_serializer_class()
|
||||||
if serializer_class is None:
|
except AssertionError: # raised if no serializer_class was found
|
||||||
msg = ("Cannot use %s on a view which does not have either a "
|
msg = ("Cannot use %s on a view which does not have either a "
|
||||||
"'serializer_class', an overriding 'get_serializer_class' "
|
"'serializer_class', an overriding 'get_serializer_class' "
|
||||||
"or 'ordering_fields' attribute.")
|
"or 'ordering_fields' attribute.")
|
||||||
raise ImproperlyConfigured(msg % self.__class__.__name__)
|
raise ImproperlyConfigured(msg % self.__class__.__name__)
|
||||||
|
|
||||||
valid_fields = [
|
valid_fields = [
|
||||||
(field.source or field_name, field.label)
|
(field.source or field_name, field.label)
|
||||||
for field_name, field in serializer_class().fields.items()
|
for field_name, field in serializer_class().fields.items()
|
||||||
|
|
|
@ -5,6 +5,7 @@ import unittest
|
||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
|
|
||||||
from django.conf.urls import url
|
from django.conf.urls import url
|
||||||
|
from django.core.exceptions import ImproperlyConfigured
|
||||||
from django.core.urlresolvers import reverse
|
from django.core.urlresolvers import reverse
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.test import TestCase
|
from django.test import TestCase
|
||||||
|
@ -786,8 +787,7 @@ class OrderingFilterTests(TestCase):
|
||||||
|
|
||||||
view = OrderingListView.as_view()
|
view = OrderingListView.as_view()
|
||||||
request = factory.get('/', {'ordering': 'text'})
|
request = factory.get('/', {'ordering': 'text'})
|
||||||
# BUG: I think this should raise ImproperlyConfigured
|
with self.assertRaises(ImproperlyConfigured):
|
||||||
with self.assertRaises(AssertionError):
|
|
||||||
view(request)
|
view(request)
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user