Skip to content

Commit 6ea32b5

Browse files
authored
mini fix (#12)
1 parent f3f1f56 commit 6ea32b5

File tree

3 files changed

+26
-7
lines changed

3 files changed

+26
-7
lines changed

docs/release-notes.md

+14
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,20 @@ Medium version numbers (0.x.0) may include API changes, in line with the [deprec
88

99
Major version numbers (x.0.0) are reserved for substantial project milestones.
1010

11+
### 0.3.6
12+
13+
**Date:** [14th August 2019]
14+
15+
* Fix for current remove fields from base serializer.
16+
```python
17+
class Ser(Serializer):
18+
field_one = CharField()
19+
20+
class TwoSer(Ser):
21+
field_one = None
22+
23+
```
24+
1125
### 0.3.5
1226

1327
**Date:** [22th Jule 2019]

rest_framework/__init__.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
__/ |
99
|___/
1010
"""
11-
VERSION = (0, 3, 5)
11+
VERSION = (0, 3, 6)
1212

1313
__title__ = 'Python-Rest-Framework'
1414
__author__ = 'Deys Timofey'

rest_framework/serializers/serializers.py

+11-6
Original file line numberDiff line numberDiff line change
@@ -47,31 +47,36 @@ def get_fields(self, cls=None):
4747
_declared_fields = OrderedDict()
4848

4949
for _cls in reversed((cls or self.cls).__mro__):
50-
_current_fields = self.get_fields_from_cls(_cls)
50+
_current_fields, _remove_fields = self.get_fields_from_cls(_cls, _declared_fields)
5151
# print(_cls, _current_fields)
5252
_declared_fields.update(_current_fields)
53+
for name in _remove_fields:
54+
del _declared_fields[name]
5355

5456
return _declared_fields
5557

56-
def get_fields_from_cls(self, cls):
58+
def get_fields_from_cls(self, cls, current_fields):
5759
"""
5860
Search fields for one class.
5961
6062
:param rest_framework.serializers.Serializer cls: Class for search fields.
63+
:param collections.OrderedDict current_fields: Current searching fields.
6164
62-
:return: Dict fields for class.
63-
:rtype: collections.OrderedDict
65+
:return: Dict fields for class. Tuple[new_fields, remove_fields]
66+
:rtype: Tuple[collections.OrderedDict, list]
6467
6568
"""
66-
_declared_fields = OrderedDict()
69+
_declared_fields, _remove_fields = OrderedDict(), []
6770

6871
# Fill storage of fields.
6972
for name, obj in six.iteritems(cls.__dict__):
7073
if isinstance(obj, Field):
7174
_declared_fields[name] = obj
75+
elif name in current_fields:
76+
_remove_fields.append(name)
7277

7378
# Forward storage of fields to the class itself.
74-
return _declared_fields
79+
return _declared_fields, _remove_fields
7580

7681

7782
class BaseSerializerMeta(type):

0 commit comments

Comments
 (0)