python - Django-Graphene : On a model ChoiceField, graphene 需要一个类型但得到一个值

标签 python django graphql graphene-django

在 Django-Graphene 上,我有这个模型:

class Entry(models.Model):
    STATE_CHOICES = [
        ("Open", "Open"),
        ("Processing", "Processing"),
        ("Closed", "Closed"),
        ("Deleted", "Deleted"),
    ]

    # ...
    state = models.CharField(max_length=10, choices=STATE_CHOICES,
                             default="Open")

具有以下 Graphite 烯架构:

class EntryType(DjangoObjectType):
    class Meta:
        model = models.Entry

class Query(graphene.ObjectType):
    entries = graphene.List(EntryType)

    def resolve_entries(self, info):
        return models.Entry.objects.all()

但是当我使用下一个查询时:

query AllEntries{
  entries{
    id
    state
  }
}

我收到此错误:

{
  "errors": [
    {
      "message": "Expected a value of type \"EntryState\" but received: OPEN",
      "path": [
        "entries",
        1,
        "state"
      ]
    }
  ],
}

有人可以解释一下我做错了什么吗?

最佳答案

这是因为这一行:

state = models.CharField(max_length=10, choices=STATE_CHOICES, default="Open")

即使这被 ORM 接受并正确保存在数据库中,它也会使 Graphite 烯感到困惑,因为它试图将字符串与枚举值进行比较。

要解决这个问题,您可以这样做:

state = models.CharField(max_length=10, choices=STATE_CHOICES, default=STATE_CHOICES.Open)

如果您不想创建/执行迁移,您也可以创建一个 Graphite 烯 ENUM 类型,然后将其映射到您的 resolve_state 函数中。

关于python - Django-Graphene : On a model ChoiceField, graphene 需要一个类型但得到一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67835836/

相关文章:

javascript - Graphql 通用突变

spring-boot - 以编程方式使用 GitHub GraphQL API,使用 RestTemplate.execute 收到错误请求,但在 Postman 上运行正常

python - 在 Python 中使用迭代而不是递归遍历二叉树

python - Django-Channels -/admin/portal 不显示创建的新模型

python - 我以前从未见过 'class __proxy__',这是什么意思(我只见过像def __str__这样的)

python - 如何使用递归验证函数验证表单

postgresql - Hasura继承角色权限不一致

python - 如何使用 conda 在 GoogleColab 中永久安装包?

python - 使用日期的 Django 模板条件语句

java - Java/Derby 世界有类似 Django Graphviz 的东西吗?