DjangoListField() vs graphene.List() в Graphene Django
Я использовал как "DjangoListField()", так и "graphene.List()".
"DjangoListField()" в schema.py:
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) # Here
def resolve_all_categories(root, info):
return Category.objects.all()
"graphene.List()" в schema.py:
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) # Here
def resolve_all_categories(root, info):
return Category.objects.all()
Затем я запросил "allCategories":
query {
allCategories {
id
name
}
}
Но результат тот же:
{
"data": {
"allCategories": [
{
"id": "1",
"name": "category1"
},
{
"id": "2",
"name": "category2"
}
]
}
}
В чем разница между "DjangoListField()" и "graphene.List()"?
"DjangoListField()" не требует Resolver, но "graphene.List()" требует Resolver.
По умолчанию "DjangoListField()" будет разрешать стандартный кверисет модели Django.
Итак, если вы удалите Resolver из вашего кода с помощью "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) # Here
Затем, вы запрашиваете "allCategories":
query {
allCategories {
id
name
}
}
Наконец, ошибка отсутствует:
{
"data": {
"allCategories": [
{
"id": "1",
"name": "category1"
},
{
"id": "2",
"name": "category2"
}
]
}
}
Но если вы удалите Resolver из вашего кода с помощью "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) # Here
def resolve_all_categories(root, info):
return Category.objects.all()
Затем, вы запрашиваете "allCategories":
query {
allCategories {
id
name
}
}
Наконец, возникает ошибка:
{
"errors": [
{
"message": "Cannot query field \"allCategories\" on type \"Query\". Did you mean \"allCategory\"?",
"locations": [
{
"line": 2,
"column": 3
}
]
}
]
}
Подробнее о "DjangoListField()" вы можете узнать на этой странице DjangoListField.