13

I am trying to change my rest end points to graphql and I had a library called TaggableManager as one of the model fields. Anyone know how this can work with graphql?

Thanks in advance

Tsuna
  • 2,098
  • 6
  • 24
  • 46

2 Answers2

16

You have to explicitly tell graphene how to convert the TaggableManger field to be used in Queries. Register @convert_django_field from graphene_django.converter before using your model with the TaggableManger field either in Queries or Mutations.

Example:

from graphene_django.converter import convert_django_field
from taggit.managers import TaggableManager

# convert TaggableManager to string representation
@convert_django_field.register(TaggableManager)
def convert_field_to_string(field, registry=None):
    return String(description=field.help_text, required=not field.null)
whirish
  • 450
  • 4
  • 18
Deepak Sood
  • 385
  • 5
  • 16
11

I made one version of the Deepak Sood answer what works for me

from graphene import String, List
from taggit.managers import TaggableManager
from graphene_django.converter import convert_django_field

@convert_django_field.register(TaggableManager)
def convert_field_to_string(field, registry=None):
    return List(String, source='get_tags')

And in the tagger model, i create a property names get_tags:

    .
    .
    .
    tags = TaggableManager()

    @property
    def get_tags(self):
        return self.tags.all()

  • 1
    By the way this should most likely be placed in the class that inherits **graphene_django.DjangoObjectType** . – ImportError Jan 09 '22 at 11:00
  • Another approach to avoid having to add a `get_tags` property ``` return graphene.List( graphene.String, description=field.help_text, required=not field.null, resolver=lambda obj, info: obj.tags.all() ) ``` – pfcodes Nov 22 '22 at 04:17