Поле \ "createUaction \" типа \ "CreateUaction \" должно иметь вложенный выбор. " - PullRequest
0 голосов
/ 24 декабря 2018

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

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

  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

Итак, я сделал мутацию для всех действий, я пытаюсь следовать принципу СУХОЙ Принсипи и суммировать их все в одномВозможно, я что-то здесь не так делаю, Новый кодер старается изо всех сил: 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.",

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

1 Ответ

0 голосов
/ 24 декабря 2018

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

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

Набор выбора состоит в основном из полей.Поле описывает один отдельный фрагмент информации, доступный для запроса в наборе выбора.

Некоторые поля описывают сложные данные или связи с другими данными.Для дальнейшего изучения этих данных само поле может содержать набор выбора, позволяющий глубоко вложенные запросы.Все операции GraphQL должны указывать свои выборки вплоть до полей, которые возвращают скалярные значения для обеспечения однозначной формы ответа.

Другими словами, каждое поле должно преобразовываться в конкретное значение (например,скаляр или перечисление).Если поле разрешается в ObjectType, вы должны запросить хотя бы одно из полей этого типа.Выбранные вами поля называются подвыбором для этого поля.

Ошибка указывает на то, что вы пропустили подвыбор для типа CreateUaction.Ваш запрос должен выглядеть примерно так:

mutation SomeOperationName {
  createUaction {
    user {
      # one or more user fields
    }
  }
}
...