【问题标题】:Graphene Django getting items石墨烯 Django 获取物品
【发布时间】:2020-09-05 21:37:52
【问题描述】:

我有一个问题:

class Query(object):
all_articles = graphene.List(ArticleType)
category_articles = graphene.List(ArticleType, category = graphene.String())

def resolve_all_articles(self, info, **kwargs):
    return Article.objects.all()

def resolve_article_by_category(self, info, **kwargs):
    category = kwargs.get('category')
    return Article.objects.get(category = category)

我想按特定类别获取所有文章。我尝试提出这样的要求:

query {
  categoryArticles(category: "SPORT") {
    title
  }
}

但它返回我:

{
  "data": {
    "categoryArticles": null
  }
}

有人知道我做错了什么或如何按特定类别获取文章吗?如果有人可以提供帮助,我将不胜感激。谢谢!

【问题讨论】:

标签: django graphql graphene-django


【解决方案1】:

很久以前,但有帮助的是 @xadm 在 cmets 中提到了文档链接。

docs.graphene-python.org/projects/django/en/latest/filtering

【讨论】:

    【解决方案2】:

    所以,最简单的方法是使用这个https://docs.graphene-python.org/projects/django/en/latest/filtering/

    在我的例子中,它看起来像这样:

    import graphene
    from graphene_django.types import DjangoObjectType
    from graphene_django.filter import DjangoFilterConnectionField
    from .models import Article, User
    
    class ArticleNode(DjangoObjectType):
       class Meta:
           model = Article
           filter_fields = ['category']
           interfaces = (graphene.relay.Node,)
    
    class Query(object):
       all_articles = DjangoFilterConnectionField(ArticleNode)
    

    【讨论】:

      【解决方案3】:

      查询类的解析函数有一个命名约定, 您将 resolve_ 添加到类变量中。

      如果Article.objects.get(category = category) 返回所需的结果,它应该可以工作。

      category_articles = graphene.List(ArticleType, category = graphene.String())
      
      def resolve_category_articles(self, info, **kwargs):
          category = kwargs.get('category')
          return Article.objects.get(category = category)
      

      N.B 重命名为category_article,因为它返回一篇文章,那么你还必须将函数重命名为resolve_category_article

      【讨论】:

        【解决方案4】:

        更改您的 getAllArticlesByCategory 以返回文章查询集。

        它可能看起来有点像这个。

        def resolve_articles_by_category(self, info, **kwargs):
            return Article.objects.filter(category__name=kwargs.get('category_name'))
        

        【讨论】:

          猜你喜欢
          • 2018-01-11
          • 2020-09-01
          • 2019-12-20
          • 2021-09-25
          • 2017-08-20
          • 2020-09-03
          • 2019-01-19
          • 2019-08-19
          • 2018-01-29
          相关资源
          最近更新 更多