石墨烯 Django 获取物品
Posted
技术标签:
【中文标题】石墨烯 Django 获取物品【英文标题】:Graphene Django getting items 【发布时间】: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
有人知道我做错了什么或如何按特定类别获取文章吗?如果有人可以提供帮助,我将不胜感激。谢谢!
【问题讨论】:
docs.graphene-python.org/projects/django/en/latest/filtering @xadm,谢谢,我会用。其实,我已经看到了,只是想也许可以换个方式,但无论如何谢谢。 也许有一些神奇的作品? 【参考方案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'))
【讨论】:
以上是关于石墨烯 Django 获取物品的主要内容,如果未能解决你的问题,请参考以下文章