aboutsummaryrefslogtreecommitdiffstats
path: root/rest_framework/tests/relations.py
diff options
context:
space:
mode:
authorCraig de Stigter2013-05-18 12:16:30 +0200
committerCraig de Stigter2013-05-18 12:16:30 +0200
commit0cd7c80e6eaf3ca17d0fb8f8878054ce570e3932 (patch)
tree3ec7c3d38d444cd8113fff9df74da33e40fa1146 /rest_framework/tests/relations.py
parentc56d5f8f63673e2d0235015e67d78f8e0e1d7550 (diff)
downloaddjango-rest-framework-0cd7c80e6eaf3ca17d0fb8f8878054ce570e3932.tar.bz2
add tests for related field source for RelatedField and PrimaryKeyRelatedField. #694
Diffstat (limited to 'rest_framework/tests/relations.py')
-rw-r--r--rest_framework/tests/relations.py37
1 files changed, 36 insertions, 1 deletions
diff --git a/rest_framework/tests/relations.py b/rest_framework/tests/relations.py
index cbf93c65..f28f0de9 100644
--- a/rest_framework/tests/relations.py
+++ b/rest_framework/tests/relations.py
@@ -5,6 +5,7 @@ from __future__ import unicode_literals
from django.db import models
from django.test import TestCase
from rest_framework import serializers
+from rest_framework.tests.models import BlogPost
class NullModel(models.Model):
@@ -33,7 +34,7 @@ class FieldTests(TestCase):
self.assertRaises(serializers.ValidationError, field.from_native, [])
-class TestManyRelateMixin(TestCase):
+class TestManyRelatedMixin(TestCase):
def test_missing_many_to_many_related_field(self):
'''
Regression test for #632
@@ -45,3 +46,37 @@ class TestManyRelateMixin(TestCase):
into = {}
field.field_from_native({}, None, 'field_name', into)
self.assertEqual(into['field_name'], [])
+
+
+# Regression tests for #694 (`source` attribute on related fields)
+
+class RelatedFieldSourceTests(TestCase):
+ def test_related_manager_source(self):
+ """
+ Relational fields should be able to use manager-returning methods as their source.
+ """
+ BlogPost.objects.create(title='blah')
+ field = serializers.RelatedField(many=True, source='get_blogposts_manager')
+
+ class ClassWithManagerMethod(object):
+ def get_blogposts_manager(self):
+ return BlogPost.objects
+
+ obj = ClassWithManagerMethod()
+ value = field.field_to_native(obj, 'field_name')
+ self.assertEqual(value, ['BlogPost object'])
+
+ def test_related_queryset_source(self):
+ """
+ Relational fields should be able to use queryset-returning methods as their source.
+ """
+ BlogPost.objects.create(title='blah')
+ field = serializers.RelatedField(many=True, source='get_blogposts_queryset')
+
+ class ClassWithQuerysetMethod(object):
+ def get_blogposts_queryset(self):
+ return BlogPost.objects.all()
+
+ obj = ClassWithQuerysetMethod()
+ value = field.field_to_native(obj, 'field_name')
+ self.assertEqual(value, ['BlogPost object'])