3

Django/Grapheneバックエンド セットアップにいくつかのビデオ アイテムがあります。各動画アイテムは 1 人の所有者にリンクされています。React アプリでは、現在のユーザーが所有するすべてのビデオと、現在のユーザーが所有していないすべてのビデオを GraphQL 経由でクエリしたいと考えています。

GraphQlクライアント側で次のクエリとフィルターを実行できます。

query AllScenes {
  allScenes {
    edges {
      node {
        id,
        name,
        owner {
          name
        }
      }
    }
  }
}

バックエンドに関連データを直接要求するフィルター パラメーターを使用した 2 つのクエリが必要です。何かのようなもの:

query AllScenes($ownerName : String!, $exclude: Boolean!) {
  allScenes(owner__name: $ownerName, exclude: $exclude) {
    edges {
      node {
        id,
        name,
        owner {
          name
        }
      }
    }
  }
}

クエリを実行しますownerName = currentUserNameが、バックエンド側で引数をexclude = True/False取得できません。excludeschema.py ファイルで試したコードは次のとおりです。

from project.scene_manager.models import Scene

from graphene import ObjectType, relay, Int, String, Field, Boolean, Float

from graphene.contrib.django.filter import DjangoFilterConnectionField
from graphene.contrib.django.types import DjangoNode

from django_filters import FilterSet, CharFilter





class SceneNode(DjangoNode):

    class Meta:

        model = Scene





class SceneFilter(FilterSet):

    owner__name = CharFilter(lookup_type='exact', exclude=exclude)


    class Meta:

        model = Scene

        fields = ['owner__name']


    
class Query(ObjectType):


    scene = relay.NodeField(SceneNode)

    all_scenes = DjangoFilterConnectionField(SceneNode, filterset_class=SceneFilter, exclude=Boolean())



    def resolve_exclude(self, args, info):

        exclude = args.get('exclude')

        return exclude




    class Meta:

        abstract = True

カスタムが使用されていますが、引数をSceneFilter渡す方法がわかりません。(私はリゾルバーexcludeを適切に使用しているとは思いません)。その問題についての助けは大歓迎です!

4

1 に答える 1