django - \"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 原则并将它们全部汇总,我可能在这里做错了,新编码员尽我所能: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.",
任何帮助表示赞赏。如果我也需要发布解析器,请告诉我。
解决方案
这不是您的架构的问题,而是您提出请求的方式。
从规范:
选择集主要由字段组成。字段描述了在选择集中可用于请求的一条离散信息。
一些字段描述了复杂的数据或与其他数据的关系。为了进一步探索这些数据,一个字段本身可能包含一个选择集,允许深度嵌套的请求。所有 GraphQL 操作都必须将它们的选择指定到返回标量值的字段,以确保响应的形状明确。
换句话说,每个字段都必须解析为一个具体的值(如标量或枚举)。如果某个字段解析为 ObjectType,则您必须请求至少一个该类型的字段。您选择的字段称为该字段的子选择。
该错误表明您缺少 type 的子选择CreateUaction
。您的请求应该看起来更像这样:
mutation SomeOperationName {
createUaction {
user {
# one or more user fields
}
}
}
推荐阅读
- php - 无法启动 MySQL:“找不到域”在 macos 上运行 mysql (Laravel Valet)
- javascript - Vue.js - 如何将参数传递给计算属性中的 JavaScript 过滤器函数?
- json - go图表动态数据
- python - 使用正则表达式匹配交替的字母数字字符
- linux - 内部 linux 设备上的 SSL
- mongodb - Kubernetes / Rancher 2,带有本地存储卷部署的 mongo-replicaset
- javascript - PHP函数从表单发布而不刷新页面?
- c# - 尝试存储列表视图 ID
- matlab - 如何存储来自 ode 求解器的中间变量?
- php - php preg_split 在可能包含空格的字段中由多个空格和制表符分解行