Skip to content

Commit ebb3811

Browse files
author
Thomas Leonard
committed
Issue #1111: foreign key should also call get_queryset method
1 parent c3404a9 commit ebb3811

File tree

4 files changed

+445
-6
lines changed

4 files changed

+445
-6
lines changed

Diff for: graphene_django/converter.py

+18-1
Original file line numberDiff line numberDiff line change
@@ -297,7 +297,24 @@ def dynamic_type():
297297
if not _type:
298298
return
299299

300-
return Field(
300+
class CustomField(Field):
301+
def wrap_resolve(self, parent_resolver):
302+
"""
303+
Implements a custom resolver which go through the `get_node` method to insure that
304+
it goes through the `get_queryset` method of the DjangoObjectType.
305+
"""
306+
resolver = super().wrap_resolve(parent_resolver)
307+
308+
def custom_resolver(root, info, **args):
309+
fk_obj = resolver(root, info, **args)
310+
if fk_obj is None:
311+
return None
312+
else:
313+
return _type.get_node(info, fk_obj.pk)
314+
315+
return custom_resolver
316+
317+
return CustomField(
301318
_type,
302319
description=get_django_field_description(field),
303320
required=not field.null,

Diff for: graphene_django/tests/models.py

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

1720

1821
class FilmDetails(models.Model):
@@ -91,8 +94,8 @@ class Meta:
9194

9295
class Article(models.Model):
9396
headline = models.CharField(max_length=100)
94-
pub_date = models.DateField()
95-
pub_date_time = models.DateTimeField()
97+
pub_date = models.DateField(auto_now_add=True)
98+
pub_date_time = models.DateTimeField(auto_now_add=True)
9699
reporter = models.ForeignKey(
97100
Reporter, on_delete=models.CASCADE, related_name="articles"
98101
)

0 commit comments

Comments
 (0)