Skip to content

Commit e051a38

Browse files
author
Thomas Leonard
committed
Issue graphql-python#1111: foreign key should also call get_queryset method
1 parent 10e48c2 commit e051a38

File tree

4 files changed

+445
-7
lines changed

4 files changed

+445
-7
lines changed

graphene_django/converter.py

+18-1
Original file line numberDiff line numberDiff line change
@@ -275,7 +275,24 @@ def dynamic_type():
275275
if not _type:
276276
return
277277

278-
return Field(
278+
class CustomField(Field):
279+
def wrap_resolve(self, parent_resolver):
280+
"""
281+
Implements a custom resolver which go through the `get_node` method to insure that
282+
it goes through the `get_queryset` method of the DjangoObjectType.
283+
"""
284+
resolver = super().wrap_resolve(parent_resolver)
285+
286+
def custom_resolver(root, info, **args):
287+
fk_obj = resolver(root, info, **args)
288+
if fk_obj is None:
289+
return None
290+
else:
291+
return _type.get_node(info, fk_obj.pk)
292+
293+
return custom_resolver
294+
295+
return CustomField(
279296
_type,
280297
description=get_django_field_description(field),
281298
required=not field.null,

graphene_django/tests/models.py

+5-3
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@ class Person(models.Model):
1313
class Pet(models.Model):
1414
name = models.CharField(max_length=30)
1515
age = models.PositiveIntegerField()
16-
16+
owner = models.ForeignKey(
17+
"Person", on_delete=models.CASCADE, null=True, blank=True, related_name="pets"
18+
)
1719

1820
class FilmDetails(models.Model):
1921
location = models.CharField(max_length=30)
@@ -91,8 +93,8 @@ class Meta:
9193

9294
class Article(models.Model):
9395
headline = models.CharField(max_length=100)
94-
pub_date = models.DateField()
95-
pub_date_time = models.DateTimeField()
96+
pub_date = models.DateField(auto_now_add=True)
97+
pub_date_time = models.DateTimeField(auto_now_add=True)
9698
reporter = models.ForeignKey(
9799
Reporter, on_delete=models.CASCADE, related_name="articles"
98100
)

0 commit comments

Comments
 (0)