У меня есть список классов, хранящихся в памяти, которые я пытаюсь проанализировать по различным типам.На него ссылаются через метод get_inventory()
.
Когда я вызываю классы по отдельности, они разрешаются так, как я ожидал.
Но когда я пытаюсь вложить один в другой, значениевозвращая ноль.
Код, за которым следуют несколько примеров:
class Account(graphene.ObjectType):
account_name = graphene.String()
account_id = graphene.String()
def resolve_account(
self, info,
account_id=None,
account_name=None
):
inventory = get_inventory()
result = [Account(
account_id=i.account_id,
account_name=i.account_name
) for i in inventory if (
(i.account_id == account_id) or
(i.account_name == account_name)
)]
if len(result):
return result[0]
else:
return Account()
account = graphene.Field(
Account,
resolver=Account.resolve_account,
account_name=graphene.String(default_value=None),
account_id=graphene.String(default_value=None)
)
class Item(graphene.ObjectType):
item_name = graphene.String()
region = graphene.String()
account = account
def resolve_item(
self, info,
item_name=None
):
inventory = get_inventory()
result = [Item(
item_name=i.item_name,
region=i.region,
account=Account(
account_id=i.account_id
)
) for i in inventory if (
(i.item_name == item_name)
)]
if len(result):
return result[0]
else:
return Item()
item = graphene.Field(
Item,
resolver=Item.resolve_item,
item_name=graphene.String(default_value=None)
)
class Query(graphene.ObjectType):
account = account
item = item
schema = graphene.Schema(query=Query)
Предположим, у меня есть учетная запись foo
, в которой есть элемент bar
.Приведенные ниже запросы возвращают поля правильно.
{
account(accountName:"foo") {
accountName
accountId
}
}
{
item(itemName: "bar") {
itemName
region
}
}
Поэтому, если бы я хотел найти учетную запись с элементом bar
, я бы подумал, что мог бы запросить bar
и получить foo
.Но он возвращает поля account
как null
.
{
item(itemName: "bar") {
itemName
region
account {
accountId
accountName
}
}
}
Напомним, что как часть resolve_item
я делаю account=Account(account_id=i.account_id)
- я ожидал бы, что это сработает.
Если я изменю последний оператор возврата resolve_account
на приведенный ниже, accountId
всегда возвращает yo
.
...
else:
return Account(
account_id='yo'
)
Так что это говорит мне, что мой распознаватель запускается, но вызов в resolve_item
не проходит account_id
правильно.
Что я делаю не так?