python - 石墨烯总是在 Json 中返回“无”
问题描述
我对 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
}
}
虽然我很确定我的数据库中有应该显示在那里的条目。我已经检查了初学者教程的查看时间,我什至无法通过第一道障碍。有什么我想念的吗?
解决方案
所以石墨烯很大程度上依赖于类型。我建议进行以下更改:
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
}
}
让我知道这是否有效。
推荐阅读
- mysql - 将数据库模型从 MySQLWorkbench 导出到 MariaDB PhpMyAdmin
- python - 如何退出这个while循环
- javascript - 使用 async/await 和 Promise 处理错误,n² 种方式让自己在脚下开枪反应原生错误
- sql - 如何从一个脚本调用另一个脚本
- java - 是否可以使用 Java 将打印机添加到 Samba 打印服务器?
- javascript - 如何使事件适用于禁用的字段集中的列表
- tcp - 在 Tcl 中解码二进制数据
- linux - BASH 中的递归
- c++ - 从临时构造对象
- python - HTML 标题中的Python Mammoth Strange元素