“未知类型\”CreateAccountInput\”。尝试变异/创建新对象时使用graphene_django

Posted

技术标签:

【中文标题】“未知类型\\”CreateAccountInput\\”。尝试变异/创建新对象时使用graphene_django【英文标题】:"Unknown type \"CreateAccountInput\". with graphene_django when trying to mutate/create new object“未知类型\”CreateAccountInput\”。尝试变异/创建新对象时使用graphene_django 【发布时间】:2019-06-01 17:55:48 【问题描述】:

我是 graphQL 的新手,我一直在尝试用它创建一个新的帐户对象。这是我现在的代码,但它是 graphQL 的 GUI,我不断收到“未知类型\”CreateAccountInput”错误。

schema.py

from authentication.models import Account
import graphene
from graphene import relay, ObjectType
from graphene_django import DjangoObjectType
from graphene import InputObjectType

class AccountGraphQL(DjangoObjectType):
    class Meta:
        model = Account
        interfaces = (relay.Node, )

class Query(graphene.ObjectType):
    username = graphene.String(argument=graphene.String(default_value="stranger"))
    email = graphene.String(argument=graphene.String(default_value="stranger"))
    password = graphene.String(argument=graphene.String(default_value="stranger"))
    first_name = graphene.String(argument=graphene.String(default_value="stranger"))

    info = graphene.String()

    def def_resolve_create_account(self, info, argument):
        return account.objects.create_user()

class CreateAccountInput(InputObjectType):
    username = graphene.String(argument=graphene.String(default_value="stranger"))
    email = graphene.String(argument=graphene.String(default_value="stranger"))
    password = graphene.String(argument=graphene.String(default_value="stranger"))
    first_name = graphene.String(argument=graphene.String(default_value="stranger"))


class CreateAccount(relay.ClientIDMutation):

    class Input:
        account = graphene.Argument(CreateAccountInput)

    new_account = graphene.Field(AccountGraphQL)

    @classmethod
    def mutate_and_get_payload(cls, args, context, info):
        account_data = args.get('account') # get account data from args
        account = Account()
        new_account = update_create_instance(account, account_data)

        return cls(new_account=new_account)

class Mutation(ObjectType):
    create_account = CreateAccount.Field()

schema = graphene.Schema(query=Query)
result = schema.execute(' create_account (argument: "graphql"')

我的突变:

mutation CreateNewAccount($input: CreateAccountInput!) 
  createAccount(input: $input) 
    newAccount 
      username
      email
      password
      first_name
    
    clientMutationId
  

我的查询

"input": "account": 
  
    "username": "graphql",
    "email": "graphql@gmail.com",
    "password": "graphql",
    "first_name":"charles"
  

我不确定问题出在哪里,就我而言,我已经定义了输入类型

【问题讨论】:

【参考方案1】:

对于使用 graphQL 的用户注册,您可以使用 django-graphql-auth。

这是来自docs的演示:

它包括用户注册和帐户验证

(在新标签页上打开视频)

这个包是我写的,有问题可以私聊我。

【讨论】:

以上是关于“未知类型\”CreateAccountInput\”。尝试变异/创建新对象时使用graphene_django的主要内容,如果未能解决你的问题,请参考以下文章

获取错误“未知”类型的参数不能分配给“错误”类型的参数 |空值'

UnknownType 类型的验证错误:未知类型 CreateUserInput

GraphQLError 未知类型“XYZMutationInput”

为啥我在这段代码中得到“未知类型名称 NSManagedObjectContext”?

通过未知类型的 Mat 进行 OpenCV 索引

未知类型名称 AFJSONRequestOperation