Search code examples
djangographqlgraphene-django

Django Graphene query filtering for foreign key


I have a django model

class Person(models.Model):
    name = models.CharField()
    address = models.CharField()

class Blog(models.Model):
    person = models.ForeignKey('Person', on_delete=models.CASCADE, blank=False, null=False)
    text = models.TextField()

How do I write a graphene schema that allows query filtering by a foreign key?

class Query(graphene.ObjectType):

    blog = graphene.Field(BlogType)
    blogs = graphene.List(BlogType, person=graphene.???, #Foreign Key call here
                              text=graphene.String())

    def resolve_blog(self, info, id):
        return Blog.objects.get(pk=id)

    def resolve_blogs(self, info, person = None, text = None, **kwargs)
       if person:
            filter = Q(person__icontains = person.name)  #Filter for foreign key
            return Blog.objects.filter(filter)

Solution

  • I think you are trying to access blogs for a specific person. If so,

    
    class Query(graphene.ObjectType):
    
        blog = graphene.Field(BlogType)
        blogs = graphene.List(BlogType, person=graphene.ID(),
                                  text=graphene.String())
    
        def resolve_blog(self, info, id):
            return Blog.objects.get(pk=id)
    
        def resolve_blogs(self, info, person = None, text = None, **kwargs)
           if person:            
                return Blog.objects.filter(person__id=person)