У меня есть модель Django, которая выглядит так (конечно, упрощенно):
from django.db import models
from polymorphic.models import PolymorphicModel
class Tournament(models.Model):
slug = models.CharField(max_length=100, unique=True)
class Event(PolymorphicModel):
tournament = models.ForeignKey(Tournament, related_name='events')
slug = models.CharField(max_length=100)
class PracticeEvent(Event):
pass
class MatchEvent(Event):
winner = models.CharField(max_length=100, null=True, blank=True, default=None)
Турниры состоят из двух видов мероприятий: тренировок и матчей. Я хотел бы представить эту модель с помощью GraphQL, используя Graphene. Вот что я придумал:
import graphene
from graphene_django import DjangoObjectType
from . import models
class TournamentType(DjangoObjectType):
class Meta:
model = models.Tournament
exclude_fields = ('id',)
class EventType(graphene.Interface):
tournament = graphene.Field(TournamentType, required=True)
slug = graphene.String(required=True)
class PracticeEventType(DjangoObjectType):
class Meta:
model = models.PracticeEvent
interfaces = (EventType,)
exclude_fields = ('id',)
class MatchEventType(DjangoObjectType):
class Meta:
model = models.MatchEvent
interfaces = (EventType,)
exclude_fields = ('id',)
extra_types = {PracticeEventType, MatchEventType}
class Query(graphene.ObjectType):
tournaments = graphene.List(TournamentType)
events = graphene.List(EventType)
# ... resolvers ...
schema = graphene.Schema(
query=Query,
types=schema_joust.extra_types,)
Все идет нормально; Я могу запросить events { ... }
напрямую, и даже tournament
доступен. Однако, поскольку DjangoObjectType
с model = models.Event
нет, я не могу запросить _7 _...
Как я могу это исправить? Я не могу сделать EventType
a DjangoObjectTpe
, и я не знаю, нужно ли добавлять поле events
постфактум.