Skip to content

Commit 9cfe337

Browse files
authored
Merge pull request #4 from DeskConnect/to-many-field
Added a DjangoToManyField to handle to-many relationships
2 parents b65afdc + 17178cf commit 9cfe337

File tree

2 files changed

+18
-3
lines changed

2 files changed

+18
-3
lines changed

graphene_django/converter.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
from .compat import (ArrayField, HStoreField, JSONField, RangeField,
1212
RelatedObject, UUIDField)
13-
from .fields import get_connection_field
13+
from .fields import get_connection_field, DjangoToManyField
1414
from .utils import get_related_model, import_single_dispatch
1515

1616
singledispatch = import_single_dispatch()
@@ -132,7 +132,8 @@ def dynamic_type():
132132

133133
if is_node(_type):
134134
return get_connection_field(_type)
135-
return Field(List(_type))
135+
136+
return DjangoToManyField(_type)
136137

137138
return Dynamic(dynamic_type)
138139

@@ -152,7 +153,7 @@ def dynamic_type():
152153

153154
if is_node(_type):
154155
return get_connection_field(_type)
155-
return Field(List(_type))
156+
return DjangoToManyField(_type)
156157

157158
return Dynamic(dynamic_type)
158159

graphene_django/fields.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,26 @@
22

33
from django.db.models.query import QuerySet
44

5+
from graphene.types import Field, List
56
from graphene.relay import ConnectionField, PageInfo
67
from graphql_relay.connection.arrayconnection import connection_from_list_slice
78

89
from .utils import DJANGO_FILTER_INSTALLED, maybe_queryset
910

1011

12+
class DjangoToManyField(Field):
13+
14+
def __init__(self, _type, *args, **kwargs):
15+
return super(DjangoToManyField, self).__init__(List(_type), *args, **kwargs)
16+
17+
@staticmethod
18+
def rel_resolver(resolver, root, args, context, info):
19+
return maybe_queryset(resolver(root, args, context, info))
20+
21+
def get_resolver(self, parent_resolver):
22+
return partial(self.rel_resolver, parent_resolver)
23+
24+
1125
class DjangoConnectionField(ConnectionField):
1226

1327
def __init__(self, *args, **kwargs):

0 commit comments

Comments
 (0)