Skip to content

Commit

Permalink
Add converter for django 3.1 JSONField (#1017)
Browse files Browse the repository at this point in the history
  • Loading branch information
nikolaik authored Aug 7, 2020
1 parent 11dbde3 commit 67a0492
Show file tree
Hide file tree
Showing 5 changed files with 29 additions and 8 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ jobs:
strategy:
max-parallel: 4
matrix:
django: ["1.11", "2.2", "3.0"]
django: ["1.11", "2.2", "3.0", "3.1"]
python-version: ["3.6", "3.7", "3.8"]
include:
- django: "1.11"
Expand Down
10 changes: 8 additions & 2 deletions graphene_django/compat.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,14 @@ class MissingType(object):
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

This comment has been minimized.

Copy link
@bendavidsonku

bendavidsonku Aug 10, 2020

@nikolaik This should be from django.db.models import JSONField

This comment has been minimized.

Copy link
@jkimbo

jkimbo Aug 12, 2020

Member

Thanks @bendavidsonku . Fixed here: #1021

except ImportError:
JSONField = MissingType
5 changes: 3 additions & 2 deletions graphene_django/converter.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
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
Expand Down Expand Up @@ -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)


Expand Down
16 changes: 14 additions & 2 deletions graphene_django/tests/test_converter.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,14 @@
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,
Expand Down Expand Up @@ -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)


Expand Down
4 changes: 3 additions & 1 deletion tox.ini
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
[tox]
envlist =
py{27,35,36,37,38}-django{111,20,21,22,master},
py{36,37,38}-django30,
py{36,37,38}-django{30,31},
black,flake8

[gh-actions]
Expand All @@ -18,6 +18,7 @@ DJANGO =
2.1: django21
2.2: django22
3.0: django30
3.1: django31
master: djangomaster

[testenv]
Expand All @@ -33,6 +34,7 @@ deps =
django21: Django>=2.1,<2.2
django22: Django>=2.2,<3.0
django30: Django>=3.0a1,<3.1
django31: Django>=3.1,<3.2
djangomaster: https://github.com/django/django/archive/master.zip
commands = {posargs:py.test --cov=graphene_django graphene_django examples}

Expand Down

1 comment on commit 67a0492

@tagirahmad
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please, help me to solve this problem. As I understand, it's related to that converter
Exception: Don't know how to convert the Django field app.Product.data (<class 'django.db.models.fields.json.JSONField'>)

Please sign in to comment.