@@ -30,6 +30,16 @@ class Meta:
30
30
fields = ('id' , 'name' , 'sources' )
31
31
32
32
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
+
33
43
class ForeignKeySourceSerializer (serializers .ModelSerializer ):
34
44
class Meta :
35
45
model = ForeignKeySource
@@ -450,3 +460,21 @@ def test_reverse_foreign_key_retrieve_with_null(self):
450
460
{'id' : 2 , 'name' : 'target-2' , 'nullable_source' : 1 },
451
461
]
452
462
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