对于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
}
}
尽管我非常确定我的数据库中有条目,但应该在其中显示。我已经查看了初学者教程的观看时间,甚至无法克服第一个障碍。 有什么我想念的吗?
答案 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
}
}
莱姆知道这行不通。