请注意,在使用graphene-django时,前提是要使用relay

在Graphene-Django中,Relay是必不可少的。

在使用graphene-django时,存在一个困扰点,即在创建过滤器时,前端假定使用relay。

石墨烯-吉隆坡

在顺利实现查询和变更后决定不使用Relay的情况下,当要实现筛选功能时,在官方网站上找到了这个。

使用Relay的Graphene-Django教程

石墨烯-Django过滤器

# cookbook/ingredients/schema.py
from graphene import relay, ObjectType
from graphene_django import DjangoObjectType
from graphene_django.filter import DjangoFilterConnectionField

from ingredients.models import Category, Ingredient


# Graphene will automatically map the Category model's fields onto the CategoryNode.
# This is configured in the CategoryNode's Meta class (as you can see below)
class CategoryNode(DjangoObjectType):
    class Meta:
        model = Category
        filter_fields = ['name', 'ingredients']
        interfaces = (relay.Node, )


class IngredientNode(DjangoObjectType):
    class Meta:
        model = Ingredient
        # Allow for some more advanced filtering here
        filter_fields = {
            'name': ['exact', 'icontains', 'istartswith'],
            'notes': ['exact', 'icontains'],
            'category': ['exact'],
            'category__name': ['exact'],
        }
        interfaces = (relay.Node, )


class Query(object):
    category = relay.Node.Field(CategoryNode)
    all_categories = DjangoFilterConnectionField(CategoryNode)

    ingredient = relay.Node.Field(IngredientNode)
    all_ingredients = DjangoFilterConnectionField(IngredientNode)
query {
  allCategories {
    edges {
      node {
        name,
        ingredients {
          edges {
            node {
              name
            }
          }
        }
      }
    }
  }
}

这个不太好。也许是因为使用了relay,但即使不使用relay,这个查询的返回也是不好的。
我真的想要做成这样。

query {
  allCategories {
    name,
    ingredients {
      name
    }
  }
}

哦,可能是必须要用到继电器吗?我想确认一下问题。

将django-filter从relay连接中分离

引法

你对你的提案是否有任何反馈?如果能在graphene-django中实现这个功能就太好了(我真的不想使用Relay)。我很愿意帮助实施。

我仍然不明白为什么graphene-django只专注于使用Relay实现graphql,因为Django可以与任何前端框架一起使用。

总之,大家似乎都有困难。(我真的不想使用接力赛)。

使用graphene-django-extras来解决问题。

石墨烯-尖端的django附加组件

这个软件包为Graphene-Django增加了一些额外的功能,以便在不使用Relay的情况下方便地使用GraphQL:
+ 允许在查询中进行分页和过滤。
+ 允许基于DjangoRestFramework序列化器定义变动。
+ 允许在查询和片段中使用指令。

总结一下,也就是说不通过中继,可以实现筛选和分页功能。
我捐赠了5000日元。谢谢eamigo86。

广告
将在 10 秒后关闭
bannerAds