djanggraphene:在模型ChoiceField上,graphene需要一个类型,但得到了一个值

2024-09-28 22:23:36 发布

您现在位置:Python中文网/ 问答频道 /正文

关于Django石墨烯,我有以下模型:

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")

使用以下石墨烯模式:

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"
      ]
    }
  ],
}

有人能解释一下我做错了什么吗


Tags: djangomodelsopenclassgraphenechoicesentriesstate
1条回答
网友
1楼 · 发布于 2024-09-28 22:23:36

这是因为这一行:

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

即使ORM接受并正确保存在数据库中,它也会混淆graphene,因为它试图将字符串与枚举值进行比较

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

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

如果不想创建/执行迁移,也可以创建一个graphene枚举类型,然后将其映射到resolve_state函数中

相关问题 更多 >