graphql-python / graphql-python/graphene-mongo

TypeError: How to resolve fields with ListField(GenericReferenceField())?

Offen
#227 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
Vorherrschende Sprache
Python
Sterne
287
Forks
111
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Beschreibung

I'm attempting to use `GenericReferenceField` or `GenericLazyReferenceField` fields in combination with `ListField`. However, it seems that the fields cannot be resolved correctly. I have the following model and graphene schema defined:

Model:
```
from mongoengine import ListField, Document, GenericReferenceField

class AndroidApp(Document):
...
generic_field_list = ListField(GenericReferenceField())
...
```

Schema:
```
import graphene
from graphene.relay import Node
from graphene_mongo import MongoengineObjectType
from graphql_jwt.decorators import superuser_required
from model import AndroidApp

class AndroidAppType(MongoengineObjectType):
class Meta:
model = AndroidApp
interfaces = (Node,)

class AndroidAppQuery(graphene.ObjectType):
android_app_list = graphene.List(AndroidAppType,
object_id_list=graphene.List(graphene.String),
name="android_app_list")

def resolve_android_app_list(self, info, object_id_list):
return AndroidApp.objects(pk__in=object_id_list)
```
Whenever I add the `ListField(GenericReferenceField())` the following stack trace occurs which says that the field cannot be resolved. A ListField in combination with `LazyReferenceField` works with the same model but not with the `GenericLazyReferenceField` or `GenericReferenceField` classes.

Stacktrace:
```
File "/usr/local/lib/python3.9/site-packages/graphene/types/schema.py", line 440, in __init__
self.graphql_schema = GraphQLSchema(
File "/usr/local/lib/python3.9/site-packages/graphql/type/schema.py", line 224, in __init__
collect_referenced_types(query)
File "/usr/local/lib/python3.9/site-packages/graphql/type/schema.py", line 433, in collect_referenced_types
collect_referenced_types(field.type)
File "/usr/local/lib/python3.9/site-packages/graphql/type/schema.py", line 433, in collect_referenced_types
collect_referenced_types(field.type)
File "/usr/local/lib/python3.9/site-packages/graphql/type/schema.py", line 432, in collect_referenced_types
for field in named_type.fields.values():
File "/usr/local/lib/python3.9/functools.py", line 993, in __get__
val = self.func(instance)
File "/usr/local/lib/python3.9/site-packages/graphql/type/definition.py", line 811, in fields
raise cls(f"{self.name} fields cannot be resolved. {error}") from error

TypeError: AndroidAppType fields cannot be resolved. Expected Graphene type, but received: .
```

What is the intended way of using `GenericReferenceField` with `ListField`? I guess according to #70 it should be supported to use the `GenericReferenceField`.

Beitragsleitfaden

Für dieses Repository ist kein Beitragsleitfaden indexiert

Rechercherichtung

Beginne damit, das AndroidAppType-Schema mit ListField(GenericReferenceField()) nachzubilden, und vergleiche es mit dem funktionierenden LazyReferenceField-Fall. Lies den Feldkonvertierungspfad von MongoengineObjectType und die Behandlung von GenericReferenceField. Als abgeschlossen gilt die Aufgabe, wenn das Schema erfolgreich erstellt wird und die Liste generischer Referenzen ohne den NoneType-Auflösungsfehler verfügbar gemacht werden kann.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
mongodb, python
Bereich
api, backend
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.