[英]In Graphene, how do you provide both a list and a specific element from one?
現在,我有一些代碼可以讓我獲取所有項目及其屬性:
import graphene
class Item(graphene.ObjectType):
name = graphene.String()
item_id = graphene.String()
class Query(graphene.ObjectType):
items = graphene.List(Item)
def resolve_items(self, info):
return [
Item(name="Enchanted Diamond", item_id="ENCHANTED_DIAMOND"),
Item(name="Enchanted Diamond Block", item_id="ENCHANTED_DIAMOND_BLOCK"),
Item(name="Power Crystal", item_id="POWER_CRYSTAL"),
Item(name="Bejeweled Handle", item_id="BEJEWELED_HANDLE"),
]
schema = graphene.Schema(query=Query)
但是,我也希望能夠獲得特定的項目。 現在,如果我運行查詢
{
items(name: "Enchanted Diamond") {
name
}
}
我得到一個
GraphQLError("Unknown argument 'name' on field 'Query.items'.", locations=[SourceLocation(line=3, column=7)])
我將如何提供一種獲取特定元素的方法,理想情況下不提供完整的單獨端點?
我在聲明items
時必須指定參數。 這是我更改的代碼部分:
items = graphene.List(Item, name=graphene.String(), item_id=graphene.String())
def resolve_items(self, info, name=None, item_id=None):
available_items = [
Item(name="Enchanted Diamond", item_id="ENCHANTED_DIAMOND"),
Item(name="Enchanted Diamond Block", item_id="ENCHANTED_DIAMOND_BLOCK"),
Item(name="Power Crystal", item_id="POWER_CRYSTAL"),
Item(name="Bejeweled Handle", item_id="BEJEWELED_HANDLE"),
]
if name:
return [item for item in available_items if item.name == name]
if item_id:
return [item for item in available_items if item.item_id == item_id]
return available_items
我覺得這比聲明一個完整的單獨item
要好,即使我覺得應該有更好的編碼方式。 (調查我現在如何使用 Unions 來改進它)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.