Skip to content

Commit 7fbc3e6

Browse files
committed
Improved Django List retreival and added extra tests.
1 parent 9cfe337 commit 7fbc3e6

File tree

5 files changed

+42
-7
lines changed

5 files changed

+42
-7
lines changed

examples/starwars/data.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@ def initialize():
3333
)
3434
xwing.save()
3535

36+
human.ship = xwing
37+
human.save()
38+
3639
ywing = Ship(
3740
id='2',
3841
name='Y-Wing',

examples/starwars/models.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
class Character(models.Model):
77
name = models.CharField(max_length=50)
8+
ship = models.ForeignKey('Ship', blank=True, null=True, related_name='characters')
89

910
def __str__(self):
1011
return self.name

examples/starwars/tests/test_connections.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,3 +45,30 @@ def test_correct_fetch_first_ship_rebels():
4545
result = schema.execute(query)
4646
assert not result.errors
4747
assert result.data == expected
48+
49+
50+
def test_correct_list_characters():
51+
initialize()
52+
query = '''
53+
query RebelsShipsQuery {
54+
node(id: "U2hpcDox") {
55+
... on Ship {
56+
name
57+
characters {
58+
name
59+
}
60+
}
61+
}
62+
}
63+
'''
64+
expected = {
65+
'node': {
66+
'name': 'X-Wing',
67+
'characters': [{
68+
'name': 'Human'
69+
}],
70+
}
71+
}
72+
result = schema.execute(query)
73+
assert not result.errors
74+
assert result.data == expected

graphene_django/converter.py

Lines changed: 3 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, DjangoToManyField
13+
from .fields import get_connection_field, DjangoListField
1414
from .utils import get_related_model, import_single_dispatch
1515

1616
singledispatch = import_single_dispatch()
@@ -133,7 +133,7 @@ def dynamic_type():
133133
if is_node(_type):
134134
return get_connection_field(_type)
135135

136-
return DjangoToManyField(_type)
136+
return DjangoListField(_type)
137137

138138
return Dynamic(dynamic_type)
139139

@@ -153,7 +153,7 @@ def dynamic_type():
153153

154154
if is_node(_type):
155155
return get_connection_field(_type)
156-
return DjangoToManyField(_type)
156+
return DjangoListField(_type)
157157

158158
return Dynamic(dynamic_type)
159159

graphene_django/fields.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,21 @@
99
from .utils import DJANGO_FILTER_INSTALLED, maybe_queryset
1010

1111

12-
class DjangoToManyField(Field):
12+
class DjangoListField(Field):
1313

1414
def __init__(self, _type, *args, **kwargs):
15-
return super(DjangoToManyField, self).__init__(List(_type), *args, **kwargs)
15+
return super(DjangoListField, self).__init__(List(_type), *args, **kwargs)
16+
17+
@property
18+
def model(self):
19+
return self.type.of_type._meta.node._meta.model
1620

1721
@staticmethod
18-
def rel_resolver(resolver, root, args, context, info):
22+
def list_resolver(resolver, root, args, context, info):
1923
return maybe_queryset(resolver(root, args, context, info))
2024

2125
def get_resolver(self, parent_resolver):
22-
return partial(self.rel_resolver, parent_resolver)
26+
return partial(self.list_resolver, parent_resolver)
2327

2428

2529
class DjangoConnectionField(ConnectionField):

0 commit comments

Comments
 (0)