【问题标题】:Graphene Mutation error, fields must be a mapping (dict / OrderedDict)Graphene Mutation 错误,字段必须是映射(dict / OrderedDict)
【发布时间】:2018-03-26 20:30:21
【问题描述】:

我开始使用 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) 以字段名称作为键或返回此类的函数 映射。

【问题讨论】:

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


    【解决方案1】:

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

    from graphene import ObjectType
    

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

    from graphene_django.types import DjangoObjectType
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        我的问题是我错误地声明了我的所有字段。这是我的类型:

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

        所以start & end 不匹配 start_time & end_time。使它们相同解决了我的问题。

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            【解决方案5】:

            如果在graphene.Mutation 继承类中没有指定输出,它甚至可能发生。 但对于 DevilWarior,情况并非如此。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2021-09-21
              • 2021-06-20
              • 1970-01-01
              • 2017-05-11
              • 2018-09-30
              • 2018-01-01
              • 2018-12-15
              相关资源
              最近更新 更多