使用django-eztables进行聚合

0 投票
1 回答
520 浏览
提问于 2025-04-17 22:49

我正在使用 django-eztables 来处理服务器端的数据表。到目前为止,一切都很顺利,但现在我想在我的表格中添加一个字段,这个字段要显示与某个对象通过特定外键关联的对象总数。虽然在客户端使用 fnRender 显示这个数据很简单,但因为排序是在服务器端进行的,所以我需要在服务器端进行聚合计算。这让我遇到了一些困难。

我似乎找不到在服务器端处理这个问题的方法。字段对象中的条目似乎只接受实际的模型字段,而我没有找到办法将我在谷歌上找到的注释加进去。我查看了 自定义排序的定义,但因为我只是构建一个字符串,这似乎并没有什么帮助。

理想情况下,我希望能找到一种方法,在字段字典中直接使用外键关系的聚合,类似于:

fields = {
    'id': 'id',
    'name': 'name',
    'total_items': 'items__count' #Something like this, where Item has a foreign key to the object the datatable is composed of
    #More fields...
}

如果这不可能,或者不切实际,只要能让排序基于聚合结果就可以了,因为我可以从客户端更改表格中显示的数据,而且我不需要进行任何过滤。

1 个回答

0

我最后明白了,其实我可以在重写 get_queryset 的时候加上注释,像这样:

def get_queryset(self):
    qs = super(SomeObjectDataTableView, self).get_queryset()
    return qs.select_related().annotate(items_count=Count('items'))

我可能应该早点想明白这个...

撰写回答