Skip to content

Commit f1e7ce5

Browse files
committed
Merge pull request #2496 from jpadilla/version-3.1
Support for Django 1.8 ArrayField
2 parents f98f842 + c696b0b commit f1e7ce5

File tree

1 file changed

+11
-0
lines changed

1 file changed

+11
-0
lines changed

rest_framework/serializers.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -986,15 +986,25 @@ def build_standard_field(self, field_name, model_field):
986986
# Fields with choices get coerced into `ChoiceField`
987987
# instead of using their regular typed field.
988988
field_class = ChoiceField
989+
989990
if not issubclass(field_class, ModelField):
990991
# `model_field` is only valid for the fallback case of
991992
# `ModelField`, which is used when no other typed field
992993
# matched to the model field.
993994
field_kwargs.pop('model_field', None)
995+
994996
if not issubclass(field_class, CharField) and not issubclass(field_class, ChoiceField):
995997
# `allow_blank` is only valid for textual fields.
996998
field_kwargs.pop('allow_blank', None)
997999

1000+
if postgres_fields and isinstance(model_field, postgres_fields.ArrayField):
1001+
child_model_field = model_field.base_field
1002+
child_field_class, child_field_kwargs = self.build_standard_field(
1003+
'child', child_model_field
1004+
)
1005+
1006+
field_kwargs['child'] = child_field_class(**child_field_kwargs)
1007+
9981008
return field_class, field_kwargs
9991009

10001010
def build_relational_field(self, field_name, relation_info):
@@ -1337,6 +1347,7 @@ class CharMappingField(DictField):
13371347
child = CharField()
13381348

13391349
ModelSerializer.serializer_field_mapping[postgres_fields.HStoreField] = CharMappingField
1350+
ModelSerializer.serializer_field_mapping[postgres_fields.ArrayField] = ListField
13401351

13411352

13421353
class HyperlinkedModelSerializer(ModelSerializer):

0 commit comments

Comments
 (0)