Graphene Django 中的 DjangoListField() 与 graphene.List()

DjangoListField() vs graphene.List() in 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)

"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) # graphene.List()

    def resolve_all_categories(root, info): # Resolver to list all objects
        return Category.objects.all()

schema = graphene.Schema(query=Query)

然后,我一一查询了"allCategories"上面schema.py中的两个代码:

query {
  allCategories {
    id
    name
  }
}

但是结果是一样的列出所有对象:

{
  "data": {
    "allCategories": [
      {
        "id": "1",
        "name": "category1"
      },
      {
        "id": "2",
        "name": "category2"
      }
    ]
  }
}

"DjangoListField()""graphene.List()"?[=15= 有什么区别]

"DjangoListField()" 具有 列出所有对象的默认解析器"graphene.List ()" 没有,所以对于 "graphene.List()",您需要 显式定义 Resolver 以列出所有objects 否则你会得到 "null".

因此,如果您使用 "DjangoListField()":

从代码中删除 Resolver
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)

然后,你查询"allCategories":

query {
  allCategories {
    id
    name
  }
}

最后,您仍然可以列出所有对象:

{
  "data": {
    "allCategories": [
      {
        "id": "1",
        "name": "category1"
      },
      {
        "id": "2",
        "name": "category2"
      }
    ]
  }
}

但是,如果您使用 "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)

然后,你查询"allCategories":

query {
  allCategories {
    id
    name
  }
}

最后,您不能列出所有对象,而是得到"null":

{
  "data": {
    "allCategories": null
  }
}

您可以在此页面 DjangoListField.

中获得有关 “DjangoListField()” 的更多详细信息