请注意,在使用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。