django-filterを使ってdjango-grapheneのリゾルバでフィールドを集計したいと思います。通常、私のリゾルバは次のようになります:django-grapheneとフィルタに注釈を付ける
my_model = DjangoFilterConnectionField(
MyModelNode,
filterset_class=MyModelFilter)
def my_resolver(self, args, context, info):
return MyModelFilter(
data=format_query_args(args),
queryset=self).qs
これはうまくいきます。
しかし、フィールドに集計を実行できるように、モデルフィルタにカスタムクエリーセットを提供したいと思います。 GraphiQLで生のSQLを点検
def my_resolver(self, args, context, info):
queryset = MyModel.objects.values(
'customer_id').annotate(
cost_amt=Sum('cost_amt', output_field=FloatField()))
return MyModelFilter(
data=format_query_args(args),
queryset=queryset).qs
、それが正しいになります。私はこのような何かをしようとしています。しかし、私はGraphQLから受け取るエラーメッセージが
"message": "Received incompatible instance \"{'cost_amt': 260.36, 'customer_id': 300968697}\"."
これは正しい結果であるが、GraphQLはジャンゴ-グラフェンからこのオブジェクトを取得しているなぜ私はわかりませんよ。カスタムクエリーセットを提供してこの作業を行うにはどうすればよいですか?
お返事ありがとうございます。私は.raw()でスタブを取ったが、それはRawQuerySetを返し、django-grapheneとdjango-filterは本当にQuerySetを必要とする。 RawQuerySetには、django-filterが結果を呼び出そうとする.all()メソッドを持たないため、爆発します。 – duffn