graphql-python / graphql-python/graphene-sqlalchemy

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

Aperta
#415 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub
Lingua principale
Python
Stelle
985
Fork
223
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Descrizione

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?

Guida per i contributori

Apri la guida per i contributori

Valutazione

Questa issue non è ancora stata valutata.

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.