我想在使用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
哪一個可以正常工作。
但是,我想提供一個自定義的查詢集到模型過濾器,以便我可以在字段上執行聚合。我試圖做這樣的事情:
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
檢查GraphiQL中的原始SQL,它看起來是正確的。但是,我從GraphQL收到錯誤消息是
"message": "Received incompatible instance \"{'cost_amt': 260.36, 'customer_id': 300968697}\"."
這是正確的結果,但我不能確定爲什麼GraphQL正從Django的石墨烯此對象。我如何提供自定義查詢集並使其工作?
感謝您的回覆。我採取刺傷.raw(),但返回一個RawQuerySet和Django石墨烯和Django過濾器真的想要一個QuerySet。它炸彈是因爲RawQuerySet沒有使用django-filter嘗試調用結果的.all()方法。 – duffn