我和你在同一条船上。对你来说可能有点晚了,但对于遇到同样问题的其他人来说,这是我在学习 GraphQL 和 Graphene 时发现的。
我也对子类感到困惑Meta
。这就是文档所述。
Graphene 在 ObjectType 上使用 Meta 内部类来设置不同的选项。
https://docs.graphene-python.org/en/latest/types/objecttypes/#objecttype-configuration-meta-class
Meta 类本质上允许您更改/修改类的属性。例如,您可以通过设置name = <short name of class>
.
默认情况下,GraphQL 模式中的类型名称将与定义 ObjectType 的类名称相同。这可以通过在 Meta 类上设置 name 属性来改变:
他们使用的例子是这个..
from graphene import ObjectType
class MyGraphQlSong(ObjectType):
class Meta:
name = 'Song'
因此,不必查询“MyGraphQlSong”,您可以通过“Song”查询它。
您还可以添加其他内容,例如描述,以及您的父类应该继承的接口(所有内容都在上面的链接中描述)。
您可以更改/修改的属性的完整列表在 API 参考中(这是特定于 ObjectType。其他类型有其他元类选项。这里有更详细的解释。https://docs.graphene-python.org /zh/最新/api/
Meta class options (optional):
name (str): Name of the GraphQL type (must be unique in schema). Defaults to class
name.
description (str): Description of the GraphQL type in the schema. Defaults to class
docstring.
interfaces (Iterable[graphene.Interface]): GraphQL interfaces to extend with this object.
all fields from interface will be included in this object’s schema.
possible_types (Iterable[class]): Used to test parent value object via isintance to see if
this type can be used to resolve an ambigous type (interface, union).
default_resolver (any Callable resolver): Override the default resolver for this
type. Defaults to graphene default resolver which returns an attribute or dictionary key with the same name as the field.
fields (Dict[str, graphene.Field]): Dictionary of field name to Field. Not recommended to
use (prefer class attributes).
我在查找 SQLAlchemy 示例中“model = ...”的来源时遇到了问题。我找不到任何引用“模型”含义的文档,但我的猜测是,因为SQLAlchemyObjectType
它是 的子类ObjectType
,所以SQLAlchemyObjectType
添加了一些没有真正记录的“选项”(据我所知)。我去阅读了源代码,果然我找到了对“model = ...”的引用
https://github.com/graphql-python/graphene-sqlalchemy/blob/master/graphene_sqlalchemy/types.py#L174
该类SQLAlchemyObjectType
添加了另外三个选项,模型、注册表和连接。如果您查看代码,则model
选项是您的 SQLAlchemy 模型类。该类SQLAlchemyObjectType
使用模型选项来检查您的模型并自动创建各自的字段。
希望这可以节省一些其他人的时间,而不必查找它。