Closed
Description
It seems that prefetch_related
is not preserved in children resolvers. (select_related
is no problem).
Example
This example is a simplified version of the code I am working with.
Models
class Family(models.Model):
name = models.CharField(max_length=255)
class Person(models.Model):
name = models.CharField(max_length=256)
family = models.ForeignKey('Family', related_name='members')
Nodes
class PersonNode(DjangoObjectType):
class Meta:
model = Person
interfaces = (graphene.relay.Node,)
class FamilyNode(DjangoObjectType):
members = graphene.ConnectionField(PersonNode)
class Meta:
model = Family
interfaces = (graphene.relay.Node,)
"Endpoint"
class Query(graphene.ObjectType):
families = graphene.ConnectionField(Family)
def resolve_families(self, args, context, info):
qs = Family.objects.prefetch_related('members')
return qs
Query
{
families {
edges {
node {
members {
edges {
node {
name
}
}
}
}
}
}
}
Problem
The family members were prefetched in the root resolver but that is definitely not used in children resolvers as a db query is made for person data each time a family is resolved.
Question
Does anyone have an idea how to get prefetch_related
used in children resolvers?
Metadata
Metadata
Assignees
Labels
No labels