1

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 に何を追加するかを決定する際に宣言の一部であるクラス変数のみを参照するため、どちらも機能しません。何か案は?

4

2 に答える 2

0

アイデア:次のように、クラスの作成時に考慮されないプロパティを定義することはどうですか

class FolderNode(DjangoObjectType):
    @property
    def folders(self):
        return graphene.List(FolderNode)
于 2017-05-27T15:00:36.577 に答える