Хотя в прошлом я использовал мутацию GraphQL, которая удаляет одну запись, мне пришла в голову мысль, что это не идеально, если я хочу удалить несколько записей одновременно, так как в итоге вызываю мутацию, которая удаляет 1 запись несколько раз (в al oop), что приводит к нескольким вызовам API по сети.
Поэтому я решил вместо этого изменить мутацию, чтобы принять, имеет аргумент - список объектов или идентификаторов (что угодно) на что я могу l oop в бэкэнде. Делая это, он делает только 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()
В прошлом я использовал:
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
, чтобы иметь возможность сделать что-то вроде: «Пользователи X, Y и Z были удалены» во внешнем интерфейсе. Но я не смог получить данные пользователей. Как мне этого добиться? Может быть, я что-то упускаю.
В настоящее время запрос GraphQL, который я пробовал для этого:
mutation {
deleteUsers(
ids: [5,6,7],
) {
users {
username
}
}
}
, но он не работает, говоря, что users
- это null
... Не знаю, как я могу получить пользователей в запросе.
Заранее спасибо.