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

Posted

技术标签:

【中文标题】如何在石墨烯中返回字典列表?【英文标题】:how to return a list of dictionary in graphene? 【发布时间】:2020-11-25 14:13:07 【问题描述】:

我是 graphql 的新手,正在处理一些作为字典列表返回的数据集。

sn-p 代码:

class Player(ObjectType):
    username = String()
    role = String()

class Game(ObjectType):
    players = List(Player)

我想知道为什么下面的代码不起作用?

class Query(ObjectType):
        game_info = Field(Game, username=String(), role=String())
        
        def resolve_game_info(self, info):
            results =  [
                        "username":"Malphite",
                        "role":"tank"
                        ,
                        
                        "username":"Teemo",
                        "role":"support"
                      ]
            output = []
            for res in results:
                 output.append(
                    Player(
                      username=res['username'],
                      role=res['role']
                    )
                  )

            return output

我如何在 graphql 中查询:

query 
  game_info(username:"Teemo") 
    players 
      username
      role
    
  

结果如下:


  "data": 
    "gameInfo": null
  

任何帮助将不胜感激!

【问题讨论】:

【参考方案1】:

问题似乎在于返回数据的格式。假设您的Game 中有更多字段,而不仅仅是players。无法将这些字段包含在您的返回格式中。

而不是return output

试试:return 'players':output

【讨论】:

这可行,但有没有办法完全删除 Game?我只添加了能够返回字典列表 我认为您正在尝试为他们定义一个Game 和玩家。那么为什么要删除它们呢?如果您不需要单独使用Game,则只需使用Players 并在其中定义game 属性即可。 如果你只是想返回列表,你不需要使用它。只需:players = graphene.List(Player,....) 而不是 game_info=graphene.Field(.....)

以上是关于如何在石墨烯中返回字典列表?的主要内容,如果未能解决你的问题,请参考以下文章

如何覆盖石墨烯中的 DjangoModelFormMutation 字段类型?

在石墨烯中使用与多个解析器相同的连接

具有外键关系的对象的石墨烯中的 GraphQL 突变

使用石墨烯在 Graphql 中返回字典而不是字符串

石墨烯的通用创建模型突变

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