虽然在过去,我使用GraphQL突变,删除一条记录,我想出的想法是,这不是理想的情况下,我想删除几个记录一次,因为它结束了调用的突变,删除1条记录几次(在一个循环),这导致在网络上的几个API调用。
因此,我决定修改突变,以接受一个参数的对象或ID列表(无论),我可以在后台循环。通过这样做,它只做1调用的API与所有的记录删除。
我成功地做到了,我面临的唯一障碍点在于 return
声明。我不知道该怎么写。
因此,如果我有一个模型(在我的模式中),如:
class UserType(DjangoObjectType):
class Meta:
model = User
fields = (
'id',
'username',
'password',
'first_name',
'last_name',
'is_active',
'group_ids',
)
full_name = graphene.String()
full_identification = graphene.String()
过去我用的是.NET语句。
class DeleteUser(graphene.Mutation):
username = graphene.String()
class Arguments:
id = graphene.ID()
def mutate(self, info, **kwargs):
user = get_object_or_404(User, id=kwargs['id'])
user.delete()
return user
class Mutation(graphene.ObjectType):
delete_user = DeleteUser.Field()
但现在我想做的事情,如: 。
class DeleteUsers(graphene.Mutation):
users = graphene.List(UserType)
username = graphene.String()
class Arguments:
ids = graphene.List(graphene.ID)
def mutate(self, info, **kwargs):
deleted_users = []
for user in User.objects.filter(id__in=kwargs['ids']):
user.delete()
deleted_users.append(user)
return deleted_users
class Mutation(graphene.ObjectType):
delete_users = DeleteUsers.Field()
你可以看到在 mutate(..)
方式 DeleteUsers
类,我试图返回 deleted_users
能够在前端做一些类似于: "但是我还没有能够检索到用户的数据。我怎样才能实现呢?也许我遗漏了什么。
目前我试过的GraphQL查询是.Y和Z已经被删除。
mutation {
deleteUsers(
ids: [5,6,7],
) {
users {
username
}
}
}
但它不工作,说 users
是 null
... 不知道如何才能检索到查询中的用户。
先谢谢你了。
好吧,我终于知道问题出在哪里了(看来说说问题就解决了,下次我就用塑料鸭子试试)。
虽然 deleted_users
是一个正确的列表,用户、 ouput type
的突变没有设置。
所以解决方法是在我的突变中加入:
class Meta:
output = graphene.List(UserType)
在我的突变中加入
其结果是 。
class DeleteUsers(graphene.Mutation):
class Arguments:
ids = graphene.List(graphene.ID)
class Meta:
output = graphene.List(UserType)
def mutate(self, info, **kwargs):
deleted_users = []
for user in User.objects.filter(id__in=kwargs['ids']):
user.delete()
deleted_users.append(user)
return deleted_users
可以用以下方式调用。
mutation {
deleteUsers(
ids: [5,6,7],
) {
username
firstName
# ...
# And other fields ...
# ...
}
}