aboutsummaryrefslogtreecommitdiffstats
path: root/rest_framework/tests
diff options
context:
space:
mode:
authorTom Christie2012-11-20 01:50:39 -0800
committerTom Christie2012-11-20 01:50:39 -0800
commitd22daa04e654f0d5410fa610bc5865b5b29b758f (patch)
tree26d726be5b4e6cbe31b66605a6fdab254704a05a /rest_framework/tests
parenta44a94dd6ea2d9497264e267a0354cb684d398f6 (diff)
parent3cc5349b2f98d9c70788a2aadefc150290316479 (diff)
downloaddjango-rest-framework-d22daa04e654f0d5410fa610bc5865b5b29b758f.tar.bz2
Merge pull request #435 from j4mie/fix-serializer-source
Fix related serializers with source argument that resolves to a callable
Diffstat (limited to 'rest_framework/tests')
-rw-r--r--rest_framework/tests/models.py3
-rw-r--r--rest_framework/tests/serializer.py33
2 files changed, 27 insertions, 9 deletions
diff --git a/rest_framework/tests/models.py b/rest_framework/tests/models.py
index 59d81150..3704cda7 100644
--- a/rest_framework/tests/models.py
+++ b/rest_framework/tests/models.py
@@ -127,6 +127,9 @@ class ActionItem(RESTFrameworkModel):
class BlogPost(RESTFrameworkModel):
title = models.CharField(max_length=100)
+ def get_first_comment(self):
+ return self.blogpostcomment_set.all()[0]
+
class BlogPostComment(RESTFrameworkModel):
text = models.TextField()
diff --git a/rest_framework/tests/serializer.py b/rest_framework/tests/serializer.py
index 814c2499..d522ef97 100644
--- a/rest_framework/tests/serializer.py
+++ b/rest_framework/tests/serializer.py
@@ -479,7 +479,10 @@ class CallableDefaultValueTests(TestCase):
class ManyRelatedTests(TestCase):
- def setUp(self):
+ def test_reverse_relations(self):
+ post = BlogPost.objects.create(title="Test blog post")
+ post.blogpostcomment_set.create(text="I hate this blog post")
+ post.blogpostcomment_set.create(text="I love this blog post")
class BlogPostCommentSerializer(serializers.Serializer):
text = serializers.CharField()
@@ -488,14 +491,7 @@ class ManyRelatedTests(TestCase):
title = serializers.CharField()
comments = BlogPostCommentSerializer(source='blogpostcomment_set')
- self.serializer_class = BlogPostSerializer
-
- def test_reverse_relations(self):
- post = BlogPost.objects.create(title="Test blog post")
- post.blogpostcomment_set.create(text="I hate this blog post")
- post.blogpostcomment_set.create(text="I love this blog post")
-
- serializer = self.serializer_class(instance=post)
+ serializer = BlogPostSerializer(instance=post)
expected = {
'title': 'Test blog post',
'comments': [
@@ -506,6 +502,25 @@ class ManyRelatedTests(TestCase):
self.assertEqual(serializer.data, expected)
+ def test_callable_source(self):
+ post = BlogPost.objects.create(title="Test blog post")
+ post.blogpostcomment_set.create(text="I love this blog post")
+
+ class BlogPostCommentSerializer(serializers.Serializer):
+ text = serializers.CharField()
+
+ class BlogPostSerializer(serializers.Serializer):
+ title = serializers.CharField()
+ first_comment = BlogPostCommentSerializer(source='get_first_comment')
+
+ serializer = BlogPostSerializer(post)
+
+ expected = {
+ 'title': 'Test blog post',
+ 'first_comment': {'text': 'I love this blog post'}
+ }
+ self.assertEqual(serializer.data, expected)
+
# Test for issue #324
class BlankFieldTests(TestCase):