Графен всегда возвращает «нет» в Json - PullRequest
0 голосов
/ 06 апреля 2020

Я довольно новичок в GraphQL и Graphene, поэтому мне трудно сказать asp, что не так с моим кодом. Я даже не могу добиться успеха с простейшими примерами с 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
  }
}

, он всегда возвращает это:

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

Хотя я почти уверен, что в моей базе данных есть записи, которые должны отображаться там , Я проверил учебное пособие для начинающих, и даже не могу преодолеть первое препятствие. Что-то мне не хватает?

1 Ответ

1 голос
/ 09 апреля 2020

Так что графен сильно зависит от типов. Я предлагаю внести следующие изменения:

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
  }
}

Lemme знать, если это работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...