石墨烯总是在 Json 中返回 "none"
Graphene always returning "none" in 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
设置目录:
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
}
}
它总是returns这个:
{
"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
}
}
让我知道这是否有效。
我对 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
设置目录:
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
}
}
它总是returns这个:
{
"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
}
}
让我知道这是否有效。