石墨烯Django获得项目

石墨烯Django获得项目,django,graphql,graphene-django,Django,Graphql,Graphene Django,我有一个问题: 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

我有一个问题:

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
  }
}

有人知道我做错了什么,或者如何按特定类别获取文章吗?如果有人能帮忙,我将非常感激。谢谢

更改getAllArticlesByCategory以返回文章查询集

它可能看起来有点像这样

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

查询类的解析函数有一个命名约定, 将resolve_uu前置到类变量

如果
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)

注意:将其重命名为
category\u article
,因为它返回一篇文章,那么您还必须将函数重命名为
resolve\u category\u article
,因此,最简单的方法是使用此函数

在我的例子中,它将如下所示:

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)

@xadm,谢谢,我会用的。事实上,我已经看到了,只是想也许有可能以其他方式,但无论如何,谢谢你。也许是一些魔术作品?