From 25de313645866fa5a0fbc38f3135b6375e764d24 Mon Sep 17 00:00:00 2001 From: Nikolai R Kristiansen Date: Sun, 2 Aug 2020 14:10:07 +0200 Subject: [PATCH] Add converter for django 3.1 JSONField --- graphene_django/compat.py | 10 ++++++++-- graphene_django/converter.py | 5 +++-- graphene_django/tests/test_converter.py | 16 ++++++++++++++-- 3 files changed, 25 insertions(+), 6 deletions(-) diff --git a/graphene_django/compat.py b/graphene_django/compat.py index 59fab30..6e5e769 100644 --- a/graphene_django/compat.py +++ b/graphene_django/compat.py @@ -8,8 +8,14 @@ try: from django.contrib.postgres.fields import ( ArrayField, HStoreField, - JSONField, + JSONField as PGJSONField, RangeField, ) except ImportError: - ArrayField, HStoreField, JSONField, RangeField = (MissingType,) * 4 + ArrayField, HStoreField, PGJSONField, RangeField = (MissingType,) * 4 + +try: + # JSONField is only available from Django 3.1 + from django.contrib.fields import JSONField +except ImportError: + JSONField = MissingType diff --git a/graphene_django/converter.py b/graphene_django/converter.py index ca524ff..0de6964 100644 --- a/graphene_django/converter.py +++ b/graphene_django/converter.py @@ -24,7 +24,7 @@ from graphene.utils.str_converters import to_camel_case from graphql import assert_valid_name from .settings import graphene_settings -from .compat import ArrayField, HStoreField, JSONField, RangeField +from .compat import ArrayField, HStoreField, JSONField, PGJSONField, RangeField from .fields import DjangoListField, DjangoConnectionField from .utils import import_single_dispatch from .utils.str_converters import to_const @@ -267,8 +267,9 @@ def convert_postgres_array_to_list(field, registry=None): @convert_django_field.register(HStoreField) +@convert_django_field.register(PGJSONField) @convert_django_field.register(JSONField) -def convert_postgres_field_to_string(field, registry=None): +def convert_pg_and_json_field_to_string(field, registry=None): return JSONString(description=field.help_text, required=not field.null) diff --git a/graphene_django/tests/test_converter.py b/graphene_django/tests/test_converter.py index f6e3606..7d8e669 100644 --- a/graphene_django/tests/test_converter.py +++ b/graphene_django/tests/test_converter.py @@ -11,7 +11,14 @@ from graphene.relay import ConnectionField, Node from graphene.types.datetime import Date, DateTime, Time from graphene.types.json import JSONString -from ..compat import ArrayField, HStoreField, JSONField, MissingType, RangeField +from ..compat import ( + ArrayField, + HStoreField, + JSONField, + PGJSONField, + MissingType, + RangeField, +) from ..converter import ( convert_django_field, convert_django_field_with_choices, @@ -348,8 +355,13 @@ def test_should_postgres_hstore_convert_string(): assert_conversion(HStoreField, JSONString) -@pytest.mark.skipif(JSONField is MissingType, reason="JSONField should exist") +@pytest.mark.skipif(PGJSONField is MissingType, reason="PGJSONField should exist") def test_should_postgres_json_convert_string(): + assert_conversion(PGJSONField, JSONString) + + +@pytest.mark.skipif(JSONField is MissingType, reason="JSONField should exist") +def test_should_json_convert_string(): assert_conversion(JSONField, JSONString)