You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Directus中如何获取关联模型字段的平均值?当前写法无效

获取关联模型字段平均值的实现方案

原写法?fields=id,position,avg(ratings.value)无法生效,因为fields查询参数仅支持指定模型已定义的字段(含关联字段的正向引用),不能直接嵌入聚合函数。

最简单的实现方式如下(以Django REST Framework为例):

步骤1:在视图查询集中添加聚合注解

通过annotate在数据库层面完成平均值计算,将结果作为新字段附加到查询集:

from django.db.models import Avg
from rest_framework.generics import ListAPIView
from .models import YourModel
from .serializers import YourModelSerializer

class YourModelListView(ListAPIView):
    # 用annotate添加avg_rating字段,关联ratings模型的value字段求平均
    queryset = YourModel.objects.annotate(avg_rating=Avg('ratings__value'))
    serializer_class = YourModelSerializer

步骤2:在序列化器中声明聚合字段

如果序列化器原本没有这个字段,需要添加只读字段来返回聚合结果:

from rest_framework import serializers
from .models import YourModel

class YourModelSerializer(serializers.ModelSerializer):
    # 声明只读的avg_rating字段,对应查询集中的注解字段
    avg_rating = serializers.FloatField(read_only=True)

    class Meta:
        model = YourModel
        fields = ['id', 'position', 'avg_rating']

步骤3:前端请求指定字段

现在可以通过?fields=id,position,avg_rating获取包含平均值的结果,和普通字段的用法一致。

这种方式的优势是聚合计算在数据库层面完成,性能远高于在代码中循环计算关联数据的平均值。

内容的提问来源于stack exchange,提问作者TemporaryName

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 23:45:43