Skip to content

Commit ccf77ca

Browse files
committed
Addressed CR comments
1 parent 47a22a5 commit ccf77ca

File tree

4 files changed

+2
-64
lines changed

4 files changed

+2
-64
lines changed

rest_framework/relations.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,8 @@ def get_attribute(self, instance):
109109
try:
110110
instance = get_attribute(instance, self.source_attrs[:-1])
111111

112+
# Handle edge case where the relationship `source` argument
113+
# points to a `get_relationship()` method on the model
112114
value = instance.serializable_value(self.source_attrs[-1])
113115
if is_simple_callable(value):
114116
value = value().pk

tests/models.py

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -48,12 +48,6 @@ class ManyToManySource(RESTFrameworkModel):
4848
class ForeignKeyTarget(RESTFrameworkModel):
4949
name = models.CharField(max_length=100)
5050

51-
def get_first_source(self):
52-
try:
53-
return self.sources.all()[0]
54-
except IndexError:
55-
return None
56-
5751

5852
class ForeignKeySource(RESTFrameworkModel):
5953
name = models.CharField(max_length=100)

tests/test_relations_hyperlink.py

Lines changed: 0 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -50,17 +50,6 @@ class Meta:
5050
fields = ('url', 'name', 'sources')
5151

5252

53-
class ForeignKeyTargetCallableSourceSerializer(serializers.HyperlinkedModelSerializer):
54-
class Meta:
55-
model = ForeignKeyTarget
56-
fields = ('url', 'name', 'first_source')
57-
58-
first_source = serializers.HyperlinkedRelatedField(
59-
read_only=True,
60-
source='get_first_source',
61-
view_name='foreignkeysource-detail')
62-
63-
6453
class ForeignKeySourceSerializer(serializers.HyperlinkedModelSerializer):
6554
class Meta:
6655
model = ForeignKeySource
@@ -455,22 +444,3 @@ def test_reverse_foreign_key_retrieve_with_null(self):
455444
{'url': 'http://testserver/onetoonetarget/2/', 'name': 'target-2', 'nullable_source': None},
456445
]
457446
self.assertEqual(serializer.data, expected)
458-
459-
460-
class HyperlinkedRelationCallableSourceTests(TestCase):
461-
urls = 'tests.test_relations_hyperlink'
462-
463-
def setUp(self):
464-
self.target = ForeignKeyTarget.objects.create(name='target-1')
465-
ForeignKeySource.objects.create(name='source-1', target=self.target)
466-
ForeignKeySource.objects.create(name='source-2', target=self.target)
467-
468-
def test_relation_field_callable_source(self):
469-
serializer = ForeignKeyTargetCallableSourceSerializer(self.target, context={'request': request})
470-
expected = {
471-
'url': 'http://testserver/foreignkeytarget/1/',
472-
'name': 'target-1',
473-
'first_source': 'http://testserver/foreignkeysource/1/',
474-
}
475-
with self.assertNumQueries(1):
476-
self.assertEqual(serializer.data, expected)

tests/test_relations_pk.py

Lines changed: 0 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -30,16 +30,6 @@ class Meta:
3030
fields = ('id', 'name', 'sources')
3131

3232

33-
class ForeignKeyTargetCallableSourceSerializer(serializers.ModelSerializer):
34-
class Meta:
35-
model = ForeignKeyTarget
36-
fields = ('id', 'name', 'first_source')
37-
38-
first_source = serializers.PrimaryKeyRelatedField(
39-
read_only=True,
40-
source='get_first_source')
41-
42-
4333
class ForeignKeySourceSerializer(serializers.ModelSerializer):
4434
class Meta:
4535
model = ForeignKeySource
@@ -460,21 +450,3 @@ def test_reverse_foreign_key_retrieve_with_null(self):
460450
{'id': 2, 'name': 'target-2', 'nullable_source': 1},
461451
]
462452
self.assertEqual(serializer.data, expected)
463-
464-
465-
class PKRelationCallableSourceTests(TestCase):
466-
467-
def setUp(self):
468-
self.target = ForeignKeyTarget.objects.create(name='target-1')
469-
self.first_source = ForeignKeySource.objects.create(id=10, name='source-1', target=self.target)
470-
ForeignKeySource.objects.create(name='source-2', target=self.target)
471-
472-
def test_relation_field_callable_source(self):
473-
serializer = ForeignKeyTargetCallableSourceSerializer(self.target)
474-
expected = {
475-
'id': 1,
476-
'name': 'target-1',
477-
'first_source': 10,
478-
}
479-
with self.assertNumQueries(1):
480-
self.assertEqual(serializer.data, expected)

0 commit comments

Comments
 (0)