4 python django python-3.x graphql graphene-django
我使用“DjangoListField()”和“graphene.List()”与解析器来列出所有对象。
schema.py 中的“DjangoListField()”:
import graphene
from graphene_django import DjangoObjectType
from graphene_django import DjangoListField
from .models import Category
class CategoryType(DjangoObjectType):
class Meta:
model = Category
fields = ("id","name")
class Query(graphene.ObjectType):
all_categories = DjangoListField(CategoryType) # DjangoListField()
def resolve_all_categories(root, info): # Resolver to list all objects
return Category.objects.all()
schema = graphene.Schema(query=Query)
Run Code Online (Sandbox Code Playgroud)
schema.py 中的“graphene.List()”:
import graphene
from graphene_django import DjangoObjectType
from .models import Category
class CategoryType(DjangoObjectType):
class Meta:
model = Category
fields = ("id","name")
class Query(graphene.ObjectType):
all_categories = graphene.List(CategoryType) # graphene.List()
def resolve_all_categories(root, info): # Resolver to list all objects
return Category.objects.all()
schema = graphene.Schema(query=Query)
Run Code Online (Sandbox Code Playgroud)
然后,我在“allCategories”中一一查询了上面schema.py中的两段代码:
query {
allCategories {
id
name
}
}
Run Code Online (Sandbox Code Playgroud)
但列出所有对象的结果是相同的:
{
"data": {
"allCategories": [
{
"id": "1",
"name": "category1"
},
{
"id": "2",
"name": "category2"
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
“DjangoListField()”和“graphene.List()”有什么区别?
小智 5
“DjangoListField()”具有默认解析器来列出所有对象,但“graphene.List()”没有它,因此对于“graphene.List()”,您需要显式定义解析器来列出所有对象,否则您会得到“无效的”。
因此,如果您使用“DjangoListField()”从代码中删除解析器:
import graphene
from graphene_django import DjangoObjectType
from graphene_django import DjangoListField
from .models import Category
class CategoryType(DjangoObjectType):
class Meta:
model = Category
fields = ("id","name")
class Query(graphene.ObjectType):
all_categories = DjangoListField(CategoryType) # DjangoListField()
schema = graphene.Schema(query=Query)
Run Code Online (Sandbox Code Playgroud)
然后,您查询“allCategories”:
query {
allCategories {
id
name
}
}
Run Code Online (Sandbox Code Playgroud)
最后,您仍然可以列出所有对象:
{
"data": {
"allCategories": [
{
"id": "1",
"name": "category1"
},
{
"id": "2",
"name": "category2"
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果您使用“graphene.List()”从代码中删除Resolver:
import graphene
from graphene_django import DjangoObjectType
from .models import Category
class CategoryType(DjangoObjectType):
class Meta:
model = Category
fields = ("id","name")
class Query(graphene.ObjectType):
all_categories = graphene.List(CategoryType) # graphene.List()
schema = graphene.Schema(query=Query)
Run Code Online (Sandbox Code Playgroud)
然后,您查询“allCategories”:
query {
allCategories {
id
name
}
}
Run Code Online (Sandbox Code Playgroud)
最后,您无法列出所有对象,而是得到“null”:
{
"data": {
"allCategories": null
}
}
Run Code Online (Sandbox Code Playgroud)
您可以在此页面DjangoListField中获得有关“DjangoListField()”的更多详细信息。
| 归档时间: |
|
| 查看次数: |
1589 次 |
| 最近记录: |