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

Posted

技术标签:

【中文标题】如何在石墨烯中将函数作为查询结果返回?【英文标题】:How to return a function as a query result in graphene? 【发布时间】:2020-11-30 21:33:16 【问题描述】:

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

这样的事情会起作用吗,或者我应该使用不同的请求来了解用户是否喜欢/不喜欢该帖子:

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】:

您可以使用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)

【讨论】:

以上是关于如何在石墨烯中将函数作为查询结果返回?的主要内容,如果未能解决你的问题,请参考以下文章

聚合石墨烯/django 查询中的字段

如何在石墨烯中返回字典列表?

石墨烯 django 继电器:继电器变换错误

如何在石墨烯烧瓶中进行多个查询过滤器?

如何在 python 石墨烯中处理带参数的查询

将 json 转换为石墨烯 graphql 响应