From 302ea0d3cf1d16bc6a380740f9ddc614430f06ec Mon Sep 17 00:00:00 2001 From: Jacob Foster Date: Tue, 11 Jul 2017 13:29:30 -0500 Subject: [PATCH] Account for nested ModelSerializers --- .../rest_framework/serializer_converter.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/graphene_django/rest_framework/serializer_converter.py b/graphene_django/rest_framework/serializer_converter.py index 055c3ac..d2a7b14 100644 --- a/graphene_django/rest_framework/serializer_converter.py +++ b/graphene_django/rest_framework/serializer_converter.py @@ -3,6 +3,7 @@ from rest_framework import serializers import graphene +from ..registry import get_global_registry from ..utils import import_single_dispatch from .types import DictType @@ -41,6 +42,7 @@ def convert_serializer_field(field, is_input=True): graphql_type = get_graphene_type_from_serializer_field(field) + args = [] kwargs = { 'description': field.help_text, 'required': is_input and field.required, @@ -52,7 +54,15 @@ def convert_serializer_field(field, is_input=True): kwargs['of_type'] = graphql_type[1] graphql_type = graphql_type[0] - return graphql_type(**kwargs) + if isinstance(field, serializers.ModelSerializer): + if is_input: + graphql_type = convert_serializer_to_input_type(field.__class__) + else: + global_registry = get_global_registry() + field_model = field.Meta.model + args = [global_registry.get_type_for_model(field_model)] + + return graphql_type(*args, **kwargs) @get_graphene_type_from_serializer_field.register(serializers.Field) @@ -60,6 +70,11 @@ def convert_serializer_field_to_string(field): return graphene.String +@get_graphene_type_from_serializer_field.register(serializers.ModelSerializer) +def convert_serializer_to_field(field): + return graphene.Field + + @get_graphene_type_from_serializer_field.register(serializers.IntegerField) def convert_serializer_field_to_int(field): return graphene.Int