Skip to content

Commit 4c885b0

Browse files
Fix serializer instantiation (denisorehovsky#3)
1 parent 6e2d978 commit 4c885b0

File tree

4 files changed

+31
-8
lines changed

4 files changed

+31
-8
lines changed

rest_polymorphic/serializers.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,8 @@ def __init__(self, *args, **kwargs):
3535

3636
for model, serializer in model_serializer_mapping.items():
3737
resource_type = self.to_resource_type(model)
38-
serializer = (serializer(context=self.context)
39-
if callable(serializer)
40-
else serializer)
38+
if callable(serializer):
39+
serializer = serializer(*args, **kwargs)
4140

4241
self.resource_type_model_mapping[resource_type] = model
4342
self.model_serializer_mapping[model] = serializer

tests/models.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
class BlogBase(PolymorphicModel):
77
name = models.CharField(max_length=10)
8+
slug = models.SlugField(max_length=255, unique=True)
89

910

1011
class BlogOne(BlogBase):

tests/serializers.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,21 +9,21 @@ class BlogBaseSerializer(serializers.ModelSerializer):
99

1010
class Meta:
1111
model = BlogBase
12-
fields = ('name', )
12+
fields = ('name', 'slug')
1313

1414

1515
class BlogOneSerializer(serializers.ModelSerializer):
1616

1717
class Meta:
1818
model = BlogOne
19-
fields = ('name', 'info', )
19+
fields = ('name', 'slug', 'info')
2020

2121

2222
class BlogTwoSerializer(serializers.ModelSerializer):
2323

2424
class Meta:
2525
model = BlogTwo
26-
fields = ('name', )
26+
fields = ('name', 'slug')
2727

2828

2929
class BlogPolymorphicSerializer(PolymorphicSerializer):

tests/test_serializers.py

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,16 +44,18 @@ def test_each_serializer_has_context(self, mocker):
4444
assert inner_serializer.context == context
4545

4646
def test_serialize(self):
47-
instance = BlogBase.objects.create(name='blog')
47+
instance = BlogBase.objects.create(name='blog', slug='blog')
4848
serializer = BlogPolymorphicSerializer(instance)
4949
assert serializer.data == {
5050
'name': 'blog',
51+
'slug': 'blog',
5152
'resourcetype': 'BlogBase',
5253
}
5354

5455
def test_deserialize(self):
5556
data = {
5657
'name': 'blog',
58+
'slug': 'blog',
5759
'resourcetype': 'BlogBase',
5860
}
5961
serializers = BlogPolymorphicSerializer(data=data)
@@ -72,15 +74,18 @@ def test_create(self):
7274
data = [
7375
{
7476
'name': 'a',
77+
'slug': 'a',
7578
'resourcetype': 'BlogBase'
7679
},
7780
{
7881
'name': 'b',
82+
'slug': 'b',
7983
'info': 'info',
8084
'resourcetype': 'BlogOne'
8185
},
8286
{
8387
'name': 'c',
88+
'slug': 'c',
8489
'resourcetype': 'BlogTwo'
8590
},
8691
]
@@ -98,9 +103,10 @@ def test_create(self):
98103
assert serializer.data == data
99104

100105
def test_update(self):
101-
instance = BlogBase.objects.create(name='blog')
106+
instance = BlogBase.objects.create(name='blog', slug='blog')
102107
data = {
103108
'name': 'new-blog',
109+
'slug': 'blog',
104110
'resourcetype': 'BlogBase'
105111
}
106112

@@ -109,3 +115,20 @@ def test_update(self):
109115

110116
serializer.save()
111117
assert instance.name == 'new-blog'
118+
assert instance.slug == 'blog'
119+
120+
def test_partial_update(self):
121+
instance = BlogBase.objects.create(name='blog', slug='blog')
122+
data = {
123+
'name': 'new-blog',
124+
'resourcetype': 'BlogBase'
125+
}
126+
127+
serializer = BlogPolymorphicSerializer(
128+
instance, data=data, partial=True
129+
)
130+
assert serializer.is_valid()
131+
132+
serializer.save()
133+
assert instance.name == 'new-blog'
134+
assert instance.slug == 'blog'

0 commit comments

Comments
 (0)