Graphene-Django でフォルダーのような型を実装しようとしています。フォルダーには、ファイルまたはフォルダーを含めることができます。これを行う:
ジャンゴモデル:
from django.db import models
class Folder(models.Model):
name = models.CharField(...)
parent = models.ForeignKey('self')
class File(models.Model):
name = models.CharField(...)
content = models.TextField(...)
グラフェン API:
from files.models import Folder, File
class FolderNode(DjangoObjectType):
folders = graphene.List(FolderNode)
def resolve_folders(self, args, context, info):
return Folder.objects.filter(parent=self)
class Meta:
model = Folder
FolderNode
独自のクラス定義で参照できないため、失敗します。別の質問への回答の適用:
class FolderNode(DjangoObjectType):
def __new__(cls, *args, **kwargs):
cls.folders = graphene.List(cls)
return object.__new__(cls, *args, **kwargs)
def resolve_folders(self, args, context, info):
return Folder.objects.filter(parent=self)
class Meta:
model = Folder
グラフェンは、API に何を追加するかを決定する際に宣言の一部であるクラス変数のみを参照するため、どちらも機能しません。何か案は?