Added another test case for PK relations

This commit is contained in:
Ion Scerbatiuc 2015-07-25 09:42:27 -07:00
parent f53c6c7741
commit 46b65d1647
2 changed files with 32 additions and 1 deletions

View File

@ -49,7 +49,10 @@ class ForeignKeyTarget(RESTFrameworkModel):
name = models.CharField(max_length=100)
def get_first_source(self):
return self.sources.first()
try:
return self.sources.all()[0]
except IndexError:
return None
class ForeignKeySource(RESTFrameworkModel):

View File

@ -30,6 +30,16 @@ class ForeignKeyTargetSerializer(serializers.ModelSerializer):
fields = ('id', 'name', 'sources')
class ForeignKeyTargetCallableSourceSerializer(serializers.ModelSerializer):
class Meta:
model = ForeignKeyTarget
fields = ('id', 'name', 'first_source')
first_source = serializers.PrimaryKeyRelatedField(
read_only=True,
source='get_first_source')
class ForeignKeySourceSerializer(serializers.ModelSerializer):
class Meta:
model = ForeignKeySource
@ -450,3 +460,21 @@ class PKNullableOneToOneTests(TestCase):
{'id': 2, 'name': 'target-2', 'nullable_source': 1},
]
self.assertEqual(serializer.data, expected)
class PKRelationCallableSourceTests(TestCase):
def setUp(self):
self.target = ForeignKeyTarget.objects.create(name='target-1')
self.first_source = ForeignKeySource.objects.create(id=10, name='source-1', target=self.target)
ForeignKeySource.objects.create(name='source-2', target=self.target)
def test_relation_field_callable_source(self):
serializer = ForeignKeyTargetCallableSourceSerializer(self.target)
expected = {
'id': 1,
'name': 'target-1',
'first_source': 10,
}
with self.assertNumQueries(1):
self.assertEqual(serializer.data, expected)