【问题标题】:In Python why GraphQL Enum values displayed as null?在 Python 中,为什么 GraphQL 枚举值显示为 null?
【发布时间】:2018-12-22 22:03:12
【问题描述】:
Django: 2.0.6
graphene: 2.1.2
graphene-django: 2.0.0

我有以下代码:

class SWLangChoice(Enum):
    PHP = "PHP"
    PY = "Python"


SWLangChoiceEnum = graphene.Enum.from_enum(SWLangChoice)


class LangChoiceType(graphene.ObjectType):
    lang = graphene.Field(SWLangChoiceEnum)


class Query(graphene.ObjectType):

    langs = graphene.Field(LangChoiceType)

    def resolve_langs(self, info):
        return SWLangChoiceEnum

最初 SWLangChoice 是一个普通的 Enum 对象。所以我将它转换为 SWLangChoiceEnum 并创建了类型 LangChoiceType。在 GraphiQL 中,我可以看到这个 Enum 的键(尽管它们标记为值)。 但是当我请求这个枚举时,我看到:

{
  "data": {
    "langs": {
      "lang": null
    }
  }
}

我做错了什么?

【问题讨论】:

  • 是否要在查询langs 中显示枚举SWLangChoiceEnum 的值?

标签: python graphql graphene-python


【解决方案1】:

我也不确定您要返回枚举的哪一部分,但这里对您的代码进行了一些最小的修改,可以同时完成这两个操作

class SWLangChoice(enum.Enum):
    PHP = "PHP"
    PY = "Python"

# SWLangChoiceEnum = graphene.Enum.from_enum(SWLangChoice)

class LangChoiceType(graphene.ObjectType):
    key = graphene.String()
    value = graphene.String()

class Query(graphene.AbstractType):

    langs = graphene.List(LangChoiceType) # Changed to return a list
    def resolve_langs(self, info):
        # Creates a new LangChoiceType object by iterating terates over enum
        return [LangChoiceType(lang.name, lang.value) for lang in SWLangChoice] 

graphene.Enum 上的当前文档在他们的页面上没有给出用例,所以我不确定它的用途。因此,我不会在我的回答中使用它。

使用上面的代码,下面的查询和结果是

query enum {
  langs {
    key
    value
  }
{
  "data": {
    "langs": [
      {
        "key": "PHP",
        "value": "PHP"
      },
      {
        "key": "PY",
        "value": "Python"
      }
    ]
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-01
    • 2020-06-10
    • 2019-10-19
    • 1970-01-01
    • 1970-01-01
    • 2013-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多