@@ -30,6 +30,16 @@ 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+
3343class ForeignKeySourceSerializer (serializers .ModelSerializer ):
3444 class Meta :
3545 model = ForeignKeySource
@@ -450,3 +460,21 @@ def test_reverse_foreign_key_retrieve_with_null(self):
450460 {'id' : 2 , 'name' : 'target-2' , 'nullable_source' : 1 },
451461 ]
452462 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