aboutsummaryrefslogtreecommitdiffstats
path: root/rest_framework
diff options
context:
space:
mode:
Diffstat (limited to 'rest_framework')
-rw-r--r--rest_framework/generics.py12
-rw-r--r--rest_framework/runtests/settings.py1
-rw-r--r--rest_framework/serializers.py4
-rw-r--r--rest_framework/tests/__init__.py5
-rw-r--r--rest_framework/tests/generics.py30
-rw-r--r--rest_framework/tests/models.py62
6 files changed, 81 insertions, 33 deletions
diff --git a/rest_framework/generics.py b/rest_framework/generics.py
index f70c6f19..4240e33e 100644
--- a/rest_framework/generics.py
+++ b/rest_framework/generics.py
@@ -2,7 +2,7 @@
Generic views that provide commmonly needed behaviour.
"""
-from rest_framework import views, mixins
+from rest_framework import views, mixins, serializers
from django.views.generic.detail import SingleObjectMixin
from django.views.generic.list import MultipleObjectMixin
@@ -18,11 +18,19 @@ class BaseView(views.APIView):
def get_serializer(self, data=None, files=None, instance=None):
# TODO: add support for files
# TODO: add support for seperate serializer/deserializer
+ serializer_class = self.serializer_class
+
+ if serializer_class is None:
+ class DefaultSerializer(serializers.ModelSerializer):
+ class Meta:
+ model = self.model
+ serializer_class = DefaultSerializer
+
context = {
'request': self.request,
'format': self.kwargs.get('format', None)
}
- return self.serializer_class(data, instance=instance, context=context)
+ return serializer_class(data, instance=instance, context=context)
class MultipleObjectBaseView(MultipleObjectMixin, BaseView):
diff --git a/rest_framework/runtests/settings.py b/rest_framework/runtests/settings.py
index 93e38f46..67de82c8 100644
--- a/rest_framework/runtests/settings.py
+++ b/rest_framework/runtests/settings.py
@@ -100,7 +100,6 @@ import django
if django.VERSION < (1, 3):
INSTALLED_APPS += ('staticfiles',)
-
# OAuth support is optional, so we only test oauth if it's installed.
try:
import oauth_provider
diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py
index 4d5958d2..986d4225 100644
--- a/rest_framework/serializers.py
+++ b/rest_framework/serializers.py
@@ -114,7 +114,7 @@ class BaseSerializer(Field):
Returns the complete set of fields for the object as a dict.
This will be the set of any explicitly declared fields,
- plus the set of fields returned by get_default_fields().
+ plus the set of fields returned by default_fields().
"""
ret = SortedDict()
@@ -234,7 +234,7 @@ class BaseSerializer(Field):
return dict([(key, self.to_native(val))
for (key, val) in obj.items()])
elif hasattr(obj, '__iter__'):
- return (self.to_native(item) for item in obj)
+ return [self.to_native(item) for item in obj]
return self.convert_object(obj)
def from_native(self, data):
diff --git a/rest_framework/tests/__init__.py b/rest_framework/tests/__init__.py
index 85ee18b6..adeaf6da 100644
--- a/rest_framework/tests/__init__.py
+++ b/rest_framework/tests/__init__.py
@@ -1,4 +1,7 @@
-"""Force import of all modules in this package in order to get the standard test runner to pick up the tests. Yowzers."""
+"""
+Force import of all modules in this package in order to get the standard test
+runner to pick up the tests. Yowzers.
+"""
import os
modules = [filename.rsplit('.', 1)[0]
diff --git a/rest_framework/tests/generics.py b/rest_framework/tests/generics.py
new file mode 100644
index 00000000..dc9c6226
--- /dev/null
+++ b/rest_framework/tests/generics.py
@@ -0,0 +1,30 @@
+from django.test import TestCase
+from django.test.client import RequestFactory
+from rest_framework import generics, status
+from rest_framework.tests.models import BasicModel
+
+
+factory = RequestFactory()
+
+
+class RootView(generics.RootAPIView):
+ model = BasicModel
+
+
+class TestListView(TestCase):
+ def setUp(self):
+ items = ['foo', 'bar', 'baz']
+ for item in items:
+ BasicModel(text=item).save()
+ self.objects = BasicModel.objects
+ self.data = [
+ {'id': obj.id, 'text': obj.text}
+ for obj in self.objects.all()
+ ]
+
+ def test_get_root_view(self):
+ view = RootView.as_view()
+ request = factory.get('/')
+ response = view(request).render()
+ self.assertEquals(response.status_code, status.HTTP_200_OK)
+ self.assertEquals(response.data, self.data)
diff --git a/rest_framework/tests/models.py b/rest_framework/tests/models.py
index 4cae68b6..7429d863 100644
--- a/rest_framework/tests/models.py
+++ b/rest_framework/tests/models.py
@@ -1,28 +1,36 @@
from django.db import models
-from django.contrib.auth.models import Group
-
-class CustomUser(models.Model):
- """
- A custom user model, which uses a 'through' table for the foreign key
- """
- username = models.CharField(max_length=255, unique=True)
- groups = models.ManyToManyField(
- to=Group, blank=True, null=True, through='UserGroupMap'
- )
-
- @models.permalink
- def get_absolute_url(self):
- return ('custom_user', (), {
- 'pk': self.id
- })
-
-
-class UserGroupMap(models.Model):
- user = models.ForeignKey(to=CustomUser)
- group = models.ForeignKey(to=Group)
-
- @models.permalink
- def get_absolute_url(self):
- return ('user_group_map', (), {
- 'pk': self.id
- })
+# from django.contrib.auth.models import Group
+
+
+# class CustomUser(models.Model):
+# """
+# A custom user model, which uses a 'through' table for the foreign key
+# """
+# username = models.CharField(max_length=255, unique=True)
+# groups = models.ManyToManyField(
+# to=Group, blank=True, null=True, through='UserGroupMap'
+# )
+
+# @models.permalink
+# def get_absolute_url(self):
+# return ('custom_user', (), {
+# 'pk': self.id
+# })
+
+
+# class UserGroupMap(models.Model):
+# user = models.ForeignKey(to=CustomUser)
+# group = models.ForeignKey(to=Group)
+
+# @models.permalink
+# def get_absolute_url(self):
+# return ('user_group_map', (), {
+# 'pk': self.id
+# })
+
+
+class BasicModel(models.Model):
+ text = models.CharField(max_length=100)
+
+ class Meta:
+ app_label = 'rest_framework'