mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-07-16 11:12:21 +03:00
Added another test case for PK relations
This commit is contained in:
parent
f53c6c7741
commit
46b65d1647
|
@ -49,7 +49,10 @@ class ForeignKeyTarget(RESTFrameworkModel):
|
||||||
name = models.CharField(max_length=100)
|
name = models.CharField(max_length=100)
|
||||||
|
|
||||||
def get_first_source(self):
|
def get_first_source(self):
|
||||||
return self.sources.first()
|
try:
|
||||||
|
return self.sources.all()[0]
|
||||||
|
except IndexError:
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
class ForeignKeySource(RESTFrameworkModel):
|
class ForeignKeySource(RESTFrameworkModel):
|
||||||
|
|
|
@ -30,6 +30,16 @@ class ForeignKeyTargetSerializer(serializers.ModelSerializer):
|
||||||
fields = ('id', 'name', 'sources')
|
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 ForeignKeySourceSerializer(serializers.ModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = ForeignKeySource
|
model = ForeignKeySource
|
||||||
|
@ -450,3 +460,21 @@ class PKNullableOneToOneTests(TestCase):
|
||||||
{'id': 2, 'name': 'target-2', 'nullable_source': 1},
|
{'id': 2, 'name': 'target-2', 'nullable_source': 1},
|
||||||
]
|
]
|
||||||
self.assertEqual(serializer.data, expected)
|
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)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user