石墨烯 Django 获取项目

Graphene Django getting items

我有一个问题:

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

但是 returns 我:

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

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

将您的 getAllArticlesByCategory 更改为 return 文章查询集。

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

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

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

如果 Article.objects.get(category = category) returns 想要的结果,应该可以。

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

所以,最简单的方法就是使用这个 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)

是很久以前的事了,但有帮助的是 @xadm 在评论中提到了文档 link。

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