石墨烯 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 获取物品的主要内容,如果未能解决你的问题,请参考以下文章

Django 石墨烯中继限制对用户拥有的对象的查询

聚合石墨烯/django 查询中的字段

石墨烯代码在 Django 数据迁移之前运行

Django 会话不是使用 JWT 和石墨烯生成的

石墨烯和 Django 关于关系

Django 石墨烯,按对象过滤