Skip to content

Commit 658b4bd

Browse files
committed
Add test cases for #7550
Signed-off-by: Stephen Finucane <stephen@that.guru>
1 parent 6c5339a commit 658b4bd

File tree

1 file changed

+67
-0
lines changed

1 file changed

+67
-0
lines changed

tests/test_model_serializer.py

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1021,6 +1021,73 @@ class Meta:
10211021
assert serializer.data == expected
10221022

10231023

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+
10241091
class DecimalFieldModel(models.Model):
10251092
decimal_field = models.DecimalField(
10261093
max_digits=3,

0 commit comments

Comments
 (0)