石墨烯在Json中始终返回“无”

时间:2020-04-06 20:34:37

标签: python django graphene-django

对于GraphQL和Graphene来说我还很陌生,所以我很难理解我的代码有什么问题。我什至无法使用GraphQL的最简单示例。这是我的代码:

models.py

class Task(models.Model):
task_name = models.CharField('Aufgabe', max_length=255)
project = models.ForeignKey(Project, on_delete=models.CASCADE)
done = models.BooleanField(verbose_name="Erledigt", default=False)

def __str__(self):
    return self.task_name

schema.py

class Task(models.Model):
task_name = models.CharField('Aufgabe', max_length=255)
project = models.ForeignKey(Project, on_delete=models.CASCADE)
done = models.BooleanField(verbose_name="Erledigt", default=False)

def __str__(self):
    return self.task_name

我在同一文件中的查询

class TaskQuery(graphene.ObjectType):

all_tasks = graphene.List(TaskType)

def resolve_all_tasks(self, info, **kwargs):
    return Task.objects.all()

另一个查询功能:

class Query(graphene.ObjectType):
tasks = TaskQuery.all_tasks

projects = ProjectQuery.all_projects

这是我的schema.py int设置目录:

import graphene

from todo import schema 

class Query(schema.Query):
    pass

class Mutation(schema.Mutation):
    pass

schema = graphene.Schema(query=Query, mutation=Mutation)

打开GraphiQL时,我可以在文档中看到查询,但是当我尝试像这样使用此查询时(例如):

query {
  tasks{
    id
    taskName
    done
  }
}

它总是返回此:

{
  "data": {
    "tasks": null
  }
}

尽管我非常确定我的数据库中有条目,但应该在其中显示。我已经查看了初学者教程的观看时间,甚至无法克服第一个障碍。 有什么我想念的吗?

1 个答案:

答案 0 :(得分:1)

因此,石墨烯高度依赖于类型。我建议进行以下更改:

from graphene.relay import Node
from graphene import ObjectType, JSONField, String
from graphene_django import DjangoObjectType

from app.models import Task, Project

class TaskType(DjangoObjectType): # this is basically your nodes in the graph
    class Meta:
        filter_fields = {'id': ['exact']}
        model = Task
        interfaces = (Node,)

class ProjectType(DjangoObjectType): # FK should have a type as well
    class Meta:
        filter_fields = {'id': ['exact']}
        model = Project
        interfaces = (Node,)


class TasksQuery(ObjectType):
    task = Node.Field(TaskType)
    all_tasks = DjangoFilterConnectionField(TaskType)

在您的schema.py中进行以下更改:

import graphene

from todo import schema

class Query(schema.TasksQuery):
    pass

class Mutation(schema.Mutation):
    pass

schema = graphene.Schema(query=Query, mutation=Mutation)

然后使用以下查询:

query {
  allTasks {
    id
    taskName
    done
  }
}

莱姆知道这行不通。