如何在石墨烯中将函数作为查询结果返回?

时间:2020-08-11 08:31:22

标签: django web graphql graphene-python graphene-django

我有一个帖子模型,我想知道当前登录的用户是否喜欢该帖子:

是否可以进行此项工作,还是应该使用其他请求来了解用户是否喜欢该帖子:

class PostNode(DjangoObjectType):
    id = graphene.ID(source='pk', required=True)
    liked = graphene.Boolean(source=Like.objects.filter(user=info.context.user,post=Post.objects.get(pk=id)))
    class Meta:
        model = Post
        interfaces = (graphene.relay.Node,)

(当然不起作用)

查询:

query {
posts {
  edges {
    node {
      liked
      title
      text
    }
  }
}

}

结果:

{
   "data": {
       "posts": {
           "edges": [
               {
                   "node": {
                       "liked": false,
                       "title": "hi",
                       "text": "m"
                   }
               },
               {
                   "node": {
                      "liked": true,
                      "title": "blalblala",
                      "text": "blalalblala"
                    }
               }
           ]
       }
   }
}

1 个答案:

答案 0 :(得分:0)

您可以使用 custom resolvers 来实现此行为,如下所示:

class PostNode(DjangoObjectType):
    id = graphene.ID(required=True)
    liked = graphene.Boolean()

    class Meta:
        model = Post
        interfaces = (graphene.relay.Node,)

    def resolve_liked(parent, info):
        # "parent" here is the Post model instance
        return Like.objects.exists(user=info.context.user, post=parent)