graphene/django 查询中的聚合字段
Aggregating fields in graphene/django queries
我正在编写一个 graphene/django ORM 查询,我需要在其中聚合所有查询结果对象上特定字段的值,并将其与查询一起 return。不太确定该怎么做,因为这涉及一些 post 处理。如果有人能提供一些指导,将不胜感激。
这是一些示例代码。 Django 模型 class 'Market' 有一个整数字段 'num_vendors'。石墨烯包装器 'MarketNode' 包裹着 'Market' 模型 class:
型号class:
class Market(models.Model):
num_vendors = models.IntegerField(....)
石墨烯class:
class MarketNode(DjangoObjectType):
Meta:
model: Market
我想查询 return 'market_count'(有多个市场)和 'vendor_count'(所有市场的所有 'vendors' 的总和)。所以查询看起来像:
allMarkets {
market_count
vendor_count
edges {
node {
...
...
num_vendors
...
}
}
}
对于 market_count,我遵循这个例子(这很好用):
https://github.com/graphql-python/graphene-django/wiki/Adding-counts-to-DjangoFilterConnectionField
对于 vendor_count(跨所有市场),我假设我需要在查询完成并解析后迭代结果并添加所有 num_vendors 字段。我怎样才能做到这一点?这一定是一个相当常见的用例,所以我确信石墨烯提供了一些钩子来做到这一点。
您可以定义带有计数字段的 MarketConnection。
类似于:
class MarketConnection(graphene.relay.Connection):
class Meta:
node = Market
market_count = graphene.Int(required=True)
vendor_count = graphene.Int(required=True)
def resolve_market_count(self, info, **kwargs):
return self.iterable.count() if isinstance(self.iterable, QuerySet) else len(self.iterable)
def resolve_vendor_count(self, info, **kwargs):
if isinstance(self.iterable, QuerySet):
return self.iterable.aggregate(Count("vendor"))
return sum([market.num_vendors for market in self.iterable])
并将connection_class添加到您的市场节点
class MarketNode(DjangoObjectType):
class Meta:
model: Market
connection_class: MarketConnection
我正在编写一个 graphene/django ORM 查询,我需要在其中聚合所有查询结果对象上特定字段的值,并将其与查询一起 return。不太确定该怎么做,因为这涉及一些 post 处理。如果有人能提供一些指导,将不胜感激。
这是一些示例代码。 Django 模型 class 'Market' 有一个整数字段 'num_vendors'。石墨烯包装器 'MarketNode' 包裹着 'Market' 模型 class:
型号class:
class Market(models.Model):
num_vendors = models.IntegerField(....)
石墨烯class:
class MarketNode(DjangoObjectType):
Meta:
model: Market
我想查询 return 'market_count'(有多个市场)和 'vendor_count'(所有市场的所有 'vendors' 的总和)。所以查询看起来像:
allMarkets {
market_count
vendor_count
edges {
node {
...
...
num_vendors
...
}
}
}
对于 market_count,我遵循这个例子(这很好用): https://github.com/graphql-python/graphene-django/wiki/Adding-counts-to-DjangoFilterConnectionField
对于 vendor_count(跨所有市场),我假设我需要在查询完成并解析后迭代结果并添加所有 num_vendors 字段。我怎样才能做到这一点?这一定是一个相当常见的用例,所以我确信石墨烯提供了一些钩子来做到这一点。
您可以定义带有计数字段的 MarketConnection。
类似于:
class MarketConnection(graphene.relay.Connection):
class Meta:
node = Market
market_count = graphene.Int(required=True)
vendor_count = graphene.Int(required=True)
def resolve_market_count(self, info, **kwargs):
return self.iterable.count() if isinstance(self.iterable, QuerySet) else len(self.iterable)
def resolve_vendor_count(self, info, **kwargs):
if isinstance(self.iterable, QuerySet):
return self.iterable.aggregate(Count("vendor"))
return sum([market.num_vendors for market in self.iterable])
并将connection_class添加到您的市场节点
class MarketNode(DjangoObjectType):
class Meta:
model: Market
connection_class: MarketConnection