Graphql 突变-批量创建对象
我想用石墨烯一次性创造出许多人。 该文档仅提到创建一个这样的人的方法:Graphql 突变-批量创建对象,graphql,graphene-python,Graphql,Graphene Python,我想用石墨烯一次性创造出许多人。 该文档仅提到创建一个这样的人的方法: class CreatePerson(graphene.Mutation): class Input: name = graphene.String() age = graphene.Int() ok = graphene.Boolean() person = graphene.Field(lambda: Person) @staticmethod def mutate(root, args, conte
class CreatePerson(graphene.Mutation):
class Input:
name = graphene.String()
age = graphene.Int()
ok = graphene.Boolean()
person = graphene.Field(lambda: Person)
@staticmethod
def mutate(root, args, context, info):
person = Person(name=args.get('name'), age=args.get('age'), mobile=args.get('mobile'))
ok = True
return CreatePerson(person=person, ok=ok)
class CreatePerson(graphene.Mutation):
class Input:
name = graphene.List(graphene.String)
ok = graphene.Boolean()
people = graphene.List(Person)
@staticmethod
def mutate(root, args, context, info):
people = [Person(name=name) for name in args.get('name)]
ok = True
return CreatePerson(people=people, ok=ok)
有什么方法可以完成吗?让你的变异输入一个列表,并返回一个创建的人的列表。大概是这样的:
class CreatePerson(graphene.Mutation):
class Input:
name = graphene.String()
age = graphene.Int()
ok = graphene.Boolean()
person = graphene.Field(lambda: Person)
@staticmethod
def mutate(root, args, context, info):
person = Person(name=args.get('name'), age=args.get('age'), mobile=args.get('mobile'))
ok = True
return CreatePerson(person=person, ok=ok)
class CreatePerson(graphene.Mutation):
class Input:
name = graphene.List(graphene.String)
ok = graphene.Boolean()
people = graphene.List(Person)
@staticmethod
def mutate(root, args, context, info):
people = [Person(name=name) for name in args.get('name)]
ok = True
return CreatePerson(people=people, ok=ok)
与使用创建对象列表的变异不同,您还可以调用在一个GraphQL请求中多次创建一个对象的变异。这是通过以下方式实现的:
接收输入列表,创建所有实例并返回所有实例 模型节点/类型应类似于-
class UserType(DjangoObjectType):
class Meta:
model = User
interfaces = (CustomGrapheneNode, )
filter_fields = {}
only_fields = (
'name',
'email'
)
定义输入字段
class UserInput(graphene.InputObjectType):
name = graphene.String(required=True)
password = graphene.String(required=True)
突变类
class CreateUser(graphene.Mutation):
users = graphene.List(UserType)
class Input:
data = graphene.List(UserInput)
Output = graphene.List(UserType)
def mutate(self, info, data):
users = []
for item in data:
user = User.objects.create(name=data['name'],
password=data['password'])
users.append(user)
return users
使此变体可由主架构调用
class Mutation():
create_user = CreateUser.Field()
“变异查询”视图如下所示-
mutation{
createUser(data:[{name:"john", password:"1234"},
{name:"john", password:"1234"}]) {
user{
name
}
}
}
我可以根据问题的答案想出一个解决办法 在本例中,有一种称为graphene.InputObjectType的类型要使用 解决方案可以是
class PersonInput(InputObjectType):
name = graphene.String()
age = graphene.Int()
class CreatePeople(graphene.Mutation):
class Input:
people = graphene.List(PersonInput)
people = graphene.List(lambda: Person)
@staticmethod
def mutate(root, args, context, info):
people = [Person.objects.create(name=person.name, age=person.age) for person in args.get('people')]
return CreatePeople(people=people)
伟大的但我如何处理不止一个领域。例如,此人的姓名、地址和年龄?您可以有复杂的输入类型,请参阅文档:Hi Jan,我使用了InputObject,它工作正常,但数据未保存到数据库。你介意帮忙吗。非常感谢你!仅供参考,您可以将您的解决方案作为答案发布并接受,以便后面的人可以轻松看到最终解决方案。常见问题解答的链接已失效。