Поле \ "createUaction \" типа \ "CreateUaction \" должно иметь дополнительный выбор. "

Я впервые использую графен, я плохо разбираюсь в нем. Таким образом, в основном создается блог, в котором пользователь может лайкать сообщения, комментарии и добавлять сообщения в свои любимые, а также подписываться друг на друга.

Я сделал отдельную модель для всех действий пользователя

  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.",

Любая помощь приветствуется. Дайте мне знать, если мне тоже нужно опубликовать резолверы.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
9
0
10 241
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это проблема не в вашей схеме, а в том, как вы делаете запрос.

Из спецификации:

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/…

Peko Chan 12.10.2021 15:28

Другие вопросы по теме