我想用django-filter对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
效果很好。
但是,我想为模型过滤器提供一个自定义的queryset,这样我就可以对字段执行聚合。我正试着做这样的事情:
检查GraphiQL中的原始SQL,它看起来是正确的。但是,我从GraphQL收到的错误消息是
"message": "Received incompatible instance \"{'cost_amt': 260.36, 'customer_id': 300968697}\"."
这是正确的结果,但我不确定为什么GraphQL从django graphene获取这个对象。如何提供自定义查询集并使其正常工作?在
看起来django graphene需要一个模型实例的查询集,当您在一个查询集上调用
.values()
时,您将得到一个字典的查询集,因此Received incompatible instance
。在您可以使用subquery expressions,或者执行一些rawsql queries这两种方法都将返回模型实例,这实际上取决于您在模型上设置的关系类型。在
似乎从关系的另一端(客户端)执行此注释可能更容易,因为您不需要使用
.values()
,但它可能无法满足您的需要。在为了让queryset工作,您需要获取可以使用的模型实例
然后你可以尝试进一步的行动。在
^{pr2}$试试
ASSET UNION
,看看是否有效,否则您也可以从relay.connection
尝试DjangoConnectionField
。在我假设您的问题是因为^{} 返回的是字典而不是模型实例。在
您可以尝试避免使用
.values()
,正如您在aggregation cheat sheet和Generate aggregates for each item in a QuerySet部分的最后两个示例中看到的那样:但请记住,您必须相应地调整“前端”/接收器,因为现在解析器将返回查询集而不是字典。在
相关问题 更多 >
编程相关推荐