石墨烯突变错误,字段必须是映射(dict / OrderedDict)

时间:2017-10-15 03:15:35

标签: python facebook-graph-api graphene-python

我开始用GraphQl / Graphene包围我的头脑。我正在构建一个连接到MongoDB的模式。到目前为止所有似乎都有效,除了突变。我一直在关注示例herehere但没有运气。有人能指出我做错了吗?提前谢谢。

import graphene

class GeoInput(graphene.InputObjectType):
    lat = graphene.Float(required=True)
    lng = graphene.Float(required=True)

    @property
    def latlng(self):
        return "({},{})".format(self.lat, self.lng)


class Address(graphene.ObjectType):
    latlng = graphene.String()


class CreateAddress(graphene.Mutation):

    class Arguments:
        geo = GeoInput(required=True)

    Output = Address

    def mutate(self, info, geo):
        return Address(latlng=geo.latlng)


class Mutation(graphene.ObjectType):
    create_address = CreateAddress.Field()


class Query(graphene.ObjectType):
    address = graphene.Field(Address, geo=GeoInput(required=True))
    def resolve_address(self, info, geo):
        return Address(latlng=geo.latlng)

schema = graphene.Schema(query=Query, mutation=Mutation)

上面的代码会生成此错误:

  

AssertionError:CreateAddress字段必须是映射(dict /   OrderedDict),字段名称为键或返回此类的函数   映射。

4 个答案:

答案 0 :(得分:2)

问题在于我安装的石墨烯版本,安装石墨烯2.0解决了这个问题。

答案 1 :(得分:1)

问题出在导入中。 使用时遇到了同样的问题:

from graphene import ObjectType

在下一个示例中,我已经找到了如何从docs正确导入它。在这里:

from graphene_django.types import DjangoObjectType

答案 2 :(得分:0)

我的问题是我没有正确声明所有字段。这是我的类型:

class EventDateRangeType(DjangoObjectType):

    class Meta:
        model = EventDateRange
        fields = ('start', 'end')

但是我的模特是:

class EventDateRange(models.Model):

    event = models.ForeignKey(Event, on_delete=models.CASCADE)
    start_time = models.DateTimeField()
    end_time = models.DateTimeField()

因此startendstart_timeend_time不匹配。使它们相同可以解决我的问题。

答案 3 :(得分:0)

从“ InputObjectType”继承的类具有类似的错误。解决方案是从graphene而不是从graphql.type.tests.test_definition导入“ InputObjectType”(不知道为什么首先从该库中导入它)