Я впервые использую графен, я плохо разбираюсь в нем. Таким образом, в основном создается блог, в котором пользователь может лайкать сообщения, комментарии и добавлять сообщения в свои любимые, а также подписываться друг на друга.
Я сделал отдельную модель для всех действий пользователя
class user_actions(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
liked_post = models.ForeignKey(Post, related_name='post_likes',
on_delete=models.CASCADE)
liked_comments = models.ForeignKey(Comment,
related_name='comment_likes', on_delete=models.CASCADE)
fav = models.ForeignKey(Post, related_name='fav_post',
on_delete=models.CASCADE)
target = models.ForeignKey(User, related_name='followers',
on_delete=models.CASCADE, null=True, blank = True)
follower = models.ForeignKey(User, related_name='targets',
on_delete=models.CASCADE, null = True, blank = True)
def __str__(self):
return self.user.username
Итак, я сделал мутацию для всех действий, я пытаюсь следовать DRY Principe и суммировать их все в один, я могу делать что-то здесь не так, Новый кодер старается изо всех сил: D
class UactionInput(InputObjectType):
liked_post_id = graphene.Int()
fav_post_id = graphene.Int()
comment_id = graphene.Int()
target_id = graphene.Int()
follower_id = graphene.Int()
class CreateUaction(graphene.Mutation):
user = graphene.Field(UactionType)
class Arguments:
input = UactionInput()
def mutate(self, info, input):
user = info.context.user
if not user.is_authenticated:
return CreateUaction(errors=json.dumps('Please Login '))
if input.liked_post_id:
post = Post.objects.get(id=input.liked_post_id)
user_action = user_actions.objects.create(
liked_post = post,
user = user
)
return CreateUaction( user = user )
if input.liked_comment_id:
comment = Comment.objects.get(id=input.liked_comment_id)
user_action = user_actions.objects.create(
liked_comment = comment,
user = user
)
return CreateUaction(user = user )
if input.fav_post_id:
post = Post.objects.get(id=input.fav_post_id)
user_action = user_actions.objects.create(
fav = post,
user = user
)
return CreateUaction(user = user )
if input.target_id:
user = User.objects.get(id=input.target_id)
user_action = user_actions.objects.create(
target = user,
user = user
)
return CreateUaction(user = user )
if input.follower_id:
user = User.objects.get(id=input.follower_id)
user_action = user_actions.objects.create(
follower= user,
user = user
)
return CreateUaction(user = user )
Извините за отступ в вопросе, но в моем коде это совершенно нормально.
Мутация createUaction дает мне эту ошибку
"message": "Field \"createUaction\" of type \"CreateUaction\" must have a sub selection.",
Любая помощь приветствуется. Дайте мне знать, если мне тоже нужно опубликовать резолверы.





Это проблема не в вашей схеме, а в том, как вы делаете запрос.
Из спецификации:
A selection set is primarily composed of fields. A field describes one discrete piece of information available to request within a selection set.
Some fields describe complex data or relationships to other data. In order to further explore this data, a field may itself contain a selection set, allowing for deeply nested requests. All GraphQL operations must specify their selections down to fields which return scalar values to ensure an unambiguously shaped response.
Другими словами, каждое поле должно разрешаться в конкретное значение (как скаляр или перечисление). Если поле разрешается в ObjectType, вы должны запросить хотя бы одно из полей этого типа. Выбранные вами поля называются частичным выбором для этого поля.
Ошибка указывает на то, что вам не хватает подвыбора для типа CreateUaction. Ваш запрос должен выглядеть примерно так:
mutation SomeOperationName {
createUaction {
user {
# one or more user fields
}
}
}
добавив ссылку на документ к этому ответу, если вы не против docs.graphene-python.org/projects/django/en/latest/…