Skip to content

Commit 0d78453

Browse files
committed
Update postgres compat
JSONField now always available.
1 parent efccb0d commit 0d78453

File tree

3 files changed

+5
-17
lines changed

3 files changed

+5
-17
lines changed

rest_framework/compat.py

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -115,23 +115,13 @@ def _resolve_model(obj):
115115
raise ValueError("{0} is not a Django model".format(obj))
116116

117117

118-
119-
# TODO: Remove
120-
# contrib.postgres only supported from 1.8 onwards.
118+
# django.contrib.postgres requires psycopg2
121119
try:
122120
from django.contrib.postgres import fields as postgres_fields
123121
except ImportError:
124122
postgres_fields = None
125123

126124

127-
# TODO: Remove
128-
# JSONField is only supported from 1.9 onwards
129-
try:
130-
from django.contrib.postgres.fields import JSONField
131-
except ImportError:
132-
JSONField = None
133-
134-
135125
# coreapi is optional (Note that uritemplate is a dependency of coreapi)
136126
try:
137127
import coreapi
@@ -298,7 +288,7 @@ class CustomValidatorMessage(object):
298288
"""
299289
We need to avoid evaluation of `lazy` translated `message` in `django.core.validators.BaseValidator.__init__`.
300290
https://github.com/django/django/blob/75ed5900321d170debef4ac452b8b3cf8a1c2384/django/core/validators.py#L297
301-
291+
302292
Ref: https://github.com/encode/django-rest-framework/pull/5452
303293
"""
304294
def __init__(self, *args, **kwargs):

rest_framework/serializers.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
from django.utils.functional import cached_property
2828
from django.utils.translation import ugettext_lazy as _
2929

30-
from rest_framework.compat import JSONField as ModelJSONField
3130
from rest_framework.compat import postgres_fields, set_many, unicode_to_repr
3231
from rest_framework.exceptions import ErrorDetail, ValidationError
3332
from rest_framework.fields import get_error_detail, set_value
@@ -861,8 +860,6 @@ class ModelSerializer(Serializer):
861860
}
862861
if ModelDurationField is not None:
863862
serializer_field_mapping[ModelDurationField] = DurationField
864-
if ModelJSONField is not None:
865-
serializer_field_mapping[ModelJSONField] = JSONField
866863
serializer_related_field = PrimaryKeyRelatedField
867864
serializer_related_to_field = SlugRelatedField
868865
serializer_url_field = HyperlinkedIdentityField
@@ -1532,6 +1529,7 @@ class CharMappingField(DictField):
15321529

15331530
ModelSerializer.serializer_field_mapping[postgres_fields.HStoreField] = CharMappingField
15341531
ModelSerializer.serializer_field_mapping[postgres_fields.ArrayField] = ListField
1532+
ModelSerializer.serializer_field_mapping[postgres_fields.JSONField] = JSONField
15351533

15361534

15371535
class HyperlinkedModelSerializer(ModelSerializer):

rest_framework/utils/field_mapping.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
from django.db import models
99
from django.utils.text import capfirst
1010

11-
from rest_framework.compat import DecimalValidator, JSONField
11+
from rest_framework.compat import DecimalValidator, postgres_fields
1212
from rest_framework.validators import UniqueValidator
1313

1414
NUMERIC_FIELD_TYPES = (
@@ -88,7 +88,7 @@ def get_field_kwargs(field_name, model_field):
8888
if decimal_places is not None:
8989
kwargs['decimal_places'] = decimal_places
9090

91-
if isinstance(model_field, models.TextField) or (JSONField and isinstance(model_field, JSONField)):
91+
if isinstance(model_field, models.TextField) or (postgres_fields and isinstance(model_field, postgres_fields.JSONField)):
9292
kwargs['style'] = {'base_template': 'textarea.html'}
9393

9494
if isinstance(model_field, models.AutoField) or not model_field.editable:

0 commit comments

Comments
 (0)