Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Union types in connections: 'UnionOptions' object has no attribute 'model' #415

Open
andersenyangjsq opened this issue Sep 24, 2024 · 0 comments

Comments

@andersenyangjsq
Copy link

andersenyangjsq commented Sep 24, 2024

Are there plans to add support for union types in connections? I have a setup like the following:

class Cat(SQLAlchemyObjectType):
    class Meta:
        model = CatModel
        interfaces = (relay.Node,)

class Dog(SQLAlchemyObjectType):
    class Meta:
        model = DogModel
        interfaces = (relay.Node,)

class Animal(graphene.Union):
    class Meta:
        types = (Cat, Dog)

class Query(graphene.ObjectType):
    animals = SQLAlchemyConnectionField(Animal)

and when I try to query for animals, I get the error: 'UnionOptions' object has no attribute 'model'.

I traced this back to the self.model call in wrap_resolve():

    def wrap_resolve(self, parent_resolver):
        return partial(
            self.connection_resolver,
            parent_resolver,
            get_nullable_type(self.type),
            self.model,
        )
    def model(self):
        return get_nullable_type(self.type)._meta.node._meta.model

When the type is a union, get_nullable_type(self.type)._meta.node._meta returns the union class (in this case Animal). In order to get a model from that, we have to drill down into its types (e.g. get_nullable_type(self.type)._meta.node._meta.types[0]._meta.model) but because it's a union, it will contain multiple models.
Any ideas how to get around this?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant