【发布时间】:2018-02-24 18:07:25
【问题描述】:
我想在我的 django-graphene 解析器中使用 django-filter 对一个字段求和。通常我的解析器看起来像:
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-graphene 获取此对象。如何提供自定义查询集并使其工作?
【问题讨论】: