graphql-python / graphql-python/graphene-sqlalchemy

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

Abierto
#415 0 comentarios 0 reacciones 0 asignados Ver en GitHub
Lenguaje dominante
Python
Estrellas
985
Forks
223
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

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,
)
```

```@property
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?

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.