![](/img/trans.png)
[英]How can i manually add document-fields into local QueryDocumentSnapshot List
[英]How can I add a list of fields dynamically to GraphQL ObjectType
我有以下代碼:
from starlette_graphene3 import GraphQLApp
import graphene
app = = APIRouter(
dependencies=[Depends(auth_middleware)],
)
DYNAMIC_TYPES = {
"length": graphene.Int(),
"authors": graphene.List(of_type=str),
"deprecated": graphene.String()
}
class MetaDataObject(graphene.ObjectType):
resource_type = graphene.String()
resource_name = graphene.String()
# I need to be able to do this somehow - specify a list of fieds and types dynamically.
for attr, g_type in DYNAMIC_TYPES.items():
setattr(MetaDataObject, attr, g_type)
class Query(graphene.ObjectType):
get_metadata = graphene.Field(MetaDataObject, resource_type=graphene.String(), resource_name=graphene.String())
def resolve_get_metadata(self, info, resource_type, resource_name):
response = table.get_item(
Key={
'resource_type': resource_type,
'resource_name': resource_name
}
)
if 'Item' not in response:
return None
return response['Item']
schema = graphene.Schema(query=Query, auto_camelcase=False)
app.add_route("/graphql", GraphQLApp(schema=schema))
如上所述,我需要能夠動態指定字段和類型列表並將其附加到元數據 Object。問題是graphe.ObjectType
不是常規的 Python class,它有一個特殊的元類來處理一些幕后工作,但我不確定如何使用元類。
您可以在 MetaDataObject class 中創建一個 graphene.Dynamic 字段,它可以接受字段和類型列表作為參數。
您可以使用graphene.Field
來定義字段,使用graphene.List
或graphene.NonNull
來定義字段的類型。
喜歡;
class MetaDataObject(graphene.ObjectType):
resource_type = graphene.String()
resource_name = graphene.String()
dynamic_fields = graphene.List(graphene.Field(graphene.String))
然后,您可以在創建元數據對象 class 的實例時將字段和類型列表傳遞給它。
喜歡;
metadata_object = MetaDataObject(dynamic_fields=[graphene.Field(graphene.String, name='field_name')])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.