在 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")
具有以下石墨烯架构:
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"
]
}
],
}
谁能解释一下我做错了什么?
答案 0 :(得分:1)
这是因为这一行:
state = models.CharField(max_length=10, choices=STATE_CHOICES, default="Open")
即使这被 ORM 接受并正确保存在数据库中,它也会混淆石墨烯,因为它试图将字符串与枚举值进行比较。
为了解决这个问题,你可以这样做:
state = models.CharField(max_length=10, choices=STATE_CHOICES, default=STATE_CHOICES.Open)
如果您不想创建/执行迁移,您也可以创建一个石墨烯 ENUM 类型,然后将其映射到您的 resolve_state
函数中。