@@ -1021,6 +1021,73 @@ class Meta:
1021
1021
assert serializer .data == expected
1022
1022
1023
1023
1024
+ class Issue7550FooModel (models .Model ):
1025
+ text = models .CharField (max_length = 100 )
1026
+ bar = models .ForeignKey (
1027
+ 'Issue7550BarModel' , null = True , blank = True , on_delete = models .SET_NULL ,
1028
+ related_name = 'foos' , related_query_name = 'foo' )
1029
+
1030
+
1031
+ class Issue7550BarModel (models .Model ):
1032
+ pass
1033
+
1034
+
1035
+ class Issue7550TestCase (TestCase ):
1036
+
1037
+ def test_dotted_source (self ):
1038
+
1039
+ class _FooSerializer (serializers .ModelSerializer ):
1040
+ class Meta :
1041
+ model = Issue7550FooModel
1042
+ fields = ('id' , 'text' )
1043
+
1044
+ class FooSerializer (serializers .ModelSerializer ):
1045
+ other_foos = _FooSerializer (source = 'bar.foos' , many = True )
1046
+
1047
+ class Meta :
1048
+ model = Issue7550BarModel
1049
+ fields = ('id' , 'other_foos' )
1050
+
1051
+ bar = Issue7550BarModel .objects .create ()
1052
+ foo_a = Issue7550FooModel .objects .create (bar = bar , text = 'abc' )
1053
+ foo_b = Issue7550FooModel .objects .create (bar = bar , text = '123' )
1054
+
1055
+ assert FooSerializer (foo_a ).data == {
1056
+ 'id' : foo_a .id ,
1057
+ 'other_foos' : [
1058
+ {
1059
+ 'id' : foo_a .id ,
1060
+ 'text' : foo_a .text ,
1061
+ },
1062
+ {
1063
+ 'id' : foo_b .id ,
1064
+ 'text' : foo_b .text ,
1065
+ },
1066
+ ],
1067
+ }
1068
+
1069
+ def test_dotted_source_with_default (self ):
1070
+
1071
+ class _FooSerializer (serializers .ModelSerializer ):
1072
+ class Meta :
1073
+ model = Issue7550FooModel
1074
+ fields = ('id' , 'text' )
1075
+
1076
+ class FooSerializer (serializers .ModelSerializer ):
1077
+ other_foos = _FooSerializer (source = 'bar.foos' , default = [], many = True )
1078
+
1079
+ class Meta :
1080
+ model = Issue7550FooModel
1081
+ fields = ('id' , 'other_foos' )
1082
+
1083
+ foo = Issue7550FooModel .objects .create (bar = None , text = 'abc' )
1084
+
1085
+ assert FooSerializer (foo ).data == {
1086
+ 'id' : foo .id ,
1087
+ 'other_foos' : [],
1088
+ }
1089
+
1090
+
1024
1091
class DecimalFieldModel (models .Model ):
1025
1092
decimal_field = models .DecimalField (
1026
1093
max_digits = 3 ,
0 commit comments