До сих пор я мог играть с Graphene без необходимости DjangoObjectType
. Я стараюсь избегать этого, так как не планирую оставаться слишком близко к своим классам моделей Django. Однако у меня возникают проблемы при реализации Relay с Graphene:
class HouseholdNode(graphene.ObjectType):
class Meta:
interfaces = (graphene.relay.Node,)
name = graphene.String()
@classmethod
def get_node(cls, info, id):
return Household.objects.get(pk=id)
Это не удается со следующей ошибкой:
Узел абстрактного типа должен разрешаться в тип объекта во время выполнения для поля Query.node со значением «Тест», полученным «Нет».
«Тест» происходит прямо из функции __str__
Household
.
Следующая попытка:
@classmethod
def get_node(cls, info, id):
return cls(Household.objects.get(pk=id))
cls
это HouseholdNode
. Однако это дает неверный результат:
"node": {
"id": "SG91c2Vob2xkOlRlc3Q=",
"name": null
}
Идентификатор на самом деле «Тест».
Работающее решение:
@classmethod
def get_node(cls, info, id):
household = Household.objects.get(pk=id)
return cls(name=household.name)
Однако я очень сомневаюсь, что это все, что Graphene может сделать для меня. Мне действительно нужно обернуть реальный объект данных в HouseholdNode
? У меня уже есть функции разрешения, нельзя ли их просто использовать вместо этого?
Документации по этим краям очень не хватает, пожалуйста, просветите меня.