Skip to content

Commit f53c6c7

Browse files
committed
Added a test to reproduce the issue
1 parent bdeb289 commit f53c6c7

File tree

2 files changed

+37
-1
lines changed

2 files changed

+37
-1
lines changed

tests/models.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,10 @@ class Meta:
1515

1616

1717
class BasicModel(RESTFrameworkModel):
18-
text = models.CharField(max_length=100, verbose_name=_("Text comes here"), help_text=_("Text description."))
18+
text = models.CharField(
19+
max_length=100,
20+
verbose_name=_("Text comes here"),
21+
help_text=_("Text description."))
1922

2023

2124
class BaseFilterableItem(RESTFrameworkModel):
@@ -45,6 +48,9 @@ class ManyToManySource(RESTFrameworkModel):
4548
class ForeignKeyTarget(RESTFrameworkModel):
4649
name = models.CharField(max_length=100)
4750

51+
def get_first_source(self):
52+
return self.sources.first()
53+
4854

4955
class ForeignKeySource(RESTFrameworkModel):
5056
name = models.CharField(max_length=100)

tests/test_relations_hyperlink.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,17 @@ 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+
5364
class ForeignKeySourceSerializer(serializers.HyperlinkedModelSerializer):
5465
class Meta:
5566
model = ForeignKeySource
@@ -444,3 +455,22 @@ def test_reverse_foreign_key_retrieve_with_null(self):
444455
{'url': 'http://testserver/onetoonetarget/2/', 'name': 'target-2', 'nullable_source': None},
445456
]
446457
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)

0 commit comments

Comments
 (0)