mirror of
https://github.com/encode/django-rest-framework.git
synced 2024-11-29 21:14:01 +03:00
Clear cached serializer data on save()
+ test. Fixes #1116.
This commit is contained in:
parent
eb0a98ad4b
commit
f07a4f4ca3
|
@ -518,6 +518,9 @@ class BaseSerializer(WritableField):
|
|||
"""
|
||||
Save the deserialized object and return it.
|
||||
"""
|
||||
# Clear cached _data, which may be invalidated by `save()`
|
||||
self._data = None
|
||||
|
||||
if isinstance(self.object, list):
|
||||
[self.save_object(item, **kwargs) for item in self.object]
|
||||
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
from django.db import models
|
||||
from django.db.models.fields import BLANK_CHOICE_DASH
|
||||
|
@ -136,6 +137,7 @@ class BasicTests(TestCase):
|
|||
'Happy new year!',
|
||||
datetime.datetime(2012, 1, 1)
|
||||
)
|
||||
self.actionitem = ActionItem(title='Some to do item',)
|
||||
self.data = {
|
||||
'email': 'tom@example.com',
|
||||
'content': 'Happy new year!',
|
||||
|
@ -264,6 +266,20 @@ class BasicTests(TestCase):
|
|||
"""
|
||||
self.assertRaises(AssertionError, PersonSerializerInvalidReadOnly, [])
|
||||
|
||||
def test_serializer_data_is_cleared_on_save(self):
|
||||
"""
|
||||
Check _data attribute is cleared on `save()`
|
||||
|
||||
Regression test for #1116
|
||||
— id field is not populated is `data` is accessed prior to `save()`
|
||||
"""
|
||||
serializer = ActionItemSerializer(self.actionitem)
|
||||
self.assertIsNone(serializer.data.get('id',None), 'New instance. `id` should not be set.')
|
||||
serializer.save()
|
||||
self.assertIsNotNone(serializer.data.get('id',None), 'Model is saved. `id` should be set.')
|
||||
|
||||
|
||||
|
||||
|
||||
class DictStyleSerializer(serializers.Serializer):
|
||||
"""
|
||||
|
|
Loading…
Reference in New Issue
Block a user