diff --git a/README.rst b/README.rst index 24ca602f..be84bcce 100644 --- a/README.rst +++ b/README.rst @@ -216,3 +216,16 @@ To display a specific error inline use the following:: {{/each}} {{input name="title" value=title}} +====== +Mixins +====== + +The following mixin classes are available to use with Rest Framework +resources. + +------------------------------------------- +rest_framework_ember.mixins.MultipleIDMixin +------------------------------------------- + +Overrides ``get_queryset`` to filter by ``ids[]`` in URL query params. + diff --git a/example/api/api.py b/example/api/api.py index 53b3d283..c356d328 100644 --- a/example/api/api.py +++ b/example/api/api.py @@ -58,5 +58,8 @@ class EmberUserModelViewSet(viewsets.ModelViewSet): parser_classes = (parsers.EmberJSONParser, ) -class EmberDataMixinUserModelViewSet(mixins.EmberDataModelMixin, EmberUserModelViewSet): +class EmberDataMixinUserModelViewSet(mixins.MultipleIDMixin, + EmberUserModelViewSet): + queryset = auth_models.User.objects.all() + diff --git a/example/settings.py b/example/settings.py index 8e541382..ae6c0286 100644 --- a/example/settings.py +++ b/example/settings.py @@ -31,6 +31,7 @@ PASSWORD_HASHERS = ('django.contrib.auth.hashers.UnsaltedMD5PasswordHasher', ) +MIDDLEWARE_CLASSES = () REST_FRAMEWORK = { 'PAGINATE_BY': 1, diff --git a/example/tests/test_ember_data_model_mixin.py b/example/tests/test_multiple_id_mixin.py similarity index 77% rename from example/tests/test_ember_data_model_mixin.py rename to example/tests/test_multiple_id_mixin.py index cf7bb592..8a9a4f6d 100644 --- a/example/tests/test_ember_data_model_mixin.py +++ b/example/tests/test_multiple_id_mixin.py @@ -7,22 +7,20 @@ from django.conf import settings -class EmberDataModelMixinTests(TestBase): +class MultipleIDMixin(TestBase): """ - Test usage with EmberDataModelMixin + Test usage with MultipleIDMixin - [, [^/]+)/$>] + [, + [^/]+)/$>] """ list_url = reverse_lazy('user-list') - def setUp(self): - super(EmberDataModelMixinTests, self).setUp() - def test_single_id_in_query_params(self): """ Ensure single ID in query params returns correct result """ - url = '/user-mixin-viewset/?ids[]=%s' % self.miles.pk + url = '/user-mixin-viewset/?ids[]={0}'.format(self.miles.pk) response = self.client.get(url) self.assertEqual(response.status_code, 200) @@ -48,7 +46,8 @@ def test_multiple_ids_in_query_params(self): """ Ensure multiple IDs in query params return correct result """ - url = '/user-mixin-viewset/?ids[]=%s&ids[]=%s' % (self.miles.pk, self.john.pk) + url = '/user-mixin-viewset/?ids[]={0}&ids[]={1}'.format( + self.miles.pk, self.john.pk) response = self.client.get(url) self.assertEqual(response.status_code, 200) @@ -67,5 +66,8 @@ def test_multiple_ids_in_query_params(self): self.assertEquals(expected.get('user'), json_content.get('user')) self.assertEquals(meta.get('count', 0), 2) self.assertEquals(meta.get("next"), 2) - self.assertEqual('http://testserver/user-mixin-viewset/?ids%5B%5D=2&ids%5B%5D=1&page=2', meta.get("next_link")) + self.assertEqual( + 'http://testserver/user-mixin-viewset/?ids%5B%5D=2&ids%5B%5D=1&page=2', + meta.get("next_link")) self.assertEqual(meta.get("page"), 1) + diff --git a/rest_framework_ember/mixins.py b/rest_framework_ember/mixins.py index eaba7b18..13211ee0 100644 --- a/rest_framework_ember/mixins.py +++ b/rest_framework_ember/mixins.py @@ -1,6 +1,8 @@ +""" +Class Mixins. +""" - -class EmberDataModelMixin(object): +class MultipleIDMixin(object): """ Override get_queryset for multiple id support """ @@ -9,3 +11,4 @@ def get_queryset(self): if ids: self.queryset = self.queryset.filter(id__in=ids) return self.queryset +