Что не так с темой GraphQL?

Сейчас я изучаю GraphQL на своем тестовом проекте с Django, и не могу понять, в чем проблема. Вот мой models.py

class Teacher(models.Model):
full_name = models.CharField(max_length=70, verbose_name="Full name")
subject = models.ManyToManyField(
    "Subject", related_name="teacher_subject", verbose_name="Subject"
)

def __str__(self):
    return self.full_name


class Subject(models.Model):
name = models.CharField(max_length=100, verbose_name="Subject name")

def __str__(self):
    return self.name

class Meta:
    verbose_name = "Subject"
    verbose_name_plural = "Subjects"
    ordering = ["name"]


class Student(models.Model):
full_name = models.CharField(max_length=70, verbose_name="Full name")
subject = models.ManyToManyField(
    "Subject", related_name="student_subject", verbose_name="Subject"
)
avg_grade = models.FloatField(verbose_name="Average grade")

def __str__(self):
    return self.full_name

Вот schema.py

import graphene
from graphene_django import DjangoObjectType
from graphene_django.filter import DjangoFilterConnectionField

from graphql_app.models import Student, Subject, Teacher


class TeacherType(DjangoObjectType):
class Meta:
    model = Teacher
    # fields = ("id", "full_name", "subject")
    filter_fields = {
        'id': ['exact'],
        'full_name': ['exact', 'icontains', 'istartswith'],
    }
    interfaces = (graphene.relay.Node,)


class SubjectType(DjangoObjectType):
class Meta:
    model = Subject
    # fields = ("id", "name")
    filter_fields = {'name': ['exact', 'icontains', 'istartswith']}
    interfaces = (graphene.relay.Node,)


class StudentType(DjangoObjectType):
class Meta:
    model = Student
    # fields = ("id", "full_name", "subject")
    filter_fields = {
        'id': ['exact'],
        'full_name': ['exact', 'icontains', 'istartswith'],
    }
    interfaces = (graphene.relay.Node,)


class Query(graphene.ObjectType):
teacher = graphene.relay.Node.Field(TeacherType)
subject = graphene.relay.Node.Field(SubjectType)
student = graphene.relay.Node.Field(StudentType)

teachers = DjangoFilterConnectionField(TeacherType)
subjects = DjangoFilterConnectionField(SubjectType)
students = DjangoFilterConnectionField(StudentType)

def resolve_teacher(self, info, **kwargs):
    num = kwargs.get("id", None)
    try:
        return Teacher.objects.get(pk=num)
    except Teacher.DoesNotExist:
        return None

def resolve_subject(self, info, **kwargs):
    num = kwargs.get("id", None)
    try:
        return Subject.objects.get(pk=num)
    except Subject.DoesNotExist:
        return None

def resolve_student(self, info, **kwargs):
    num = kwargs.get("id", None)
    try:
        return Student.objects.get(pk=num)
    except Student.DoesNotExist:
        return None

def resolve_teachers(self, info):
    return Teacher.objects.all()

def resolve_subjects(self, info):
    return Subject.objects.all()

def resolve_students(self, info):
    return Student.objects.all()

schema = graphene.Schema(query=Query)

Вот url.py

from django.contrib import admin
from django.urls import path
from django.views.decorators.csrf import csrf_exempt
from graphene_django.views import GraphQLView

from graphql_app.schema import schema

urlpatterns = [
    path("admin/", admin.site.urls),
    path("graphql/", csrf_exempt(GraphQLView.as_view(graphiql=True, schema=schema))),
]

Теперь, используя этот запрос, я ожидаю получить список элементов:

{
  students(fullName_Icontains: "Jose") {
    edges {
      node {
        id,
        fullName
      }
    }
  }
}
<

Либо этот запрос:

{
  teacher(id: 2) {
    id
    fullName
  }
}

вызывает "data": {"teacher": null}, считая, что учитель с таким ID существует в БД. Что не так?

Вернуться на верх