关于python:使用django-eztables进行聚合

Aggregation with django-eztables

我正在使用django-eztables进行数据表的服务器端处理。到目前为止,它一直运行良好,但是现在我试图在表中添加一个字段,该字段包含通过特定外键与该对象关联的对象总数。使用fnRender使它正确显示在客户端很容易,但是由于排序是在服务器端完成的,因此我实际上需要在服务器端进行聚合。事实证明这很困难。

我似乎找不到在服务器端处理此问题的方法。字段对象中的条目似乎只接受实际的模型字段,而且我看不出有任何方法可以套用我的Google搜索结果建议的注释。我已经研究过定义自定义排序,但是由于我只是在构建字符串,因此这似乎并没有帮助。

理想情况下,我想找到一种在字段字典中使用外键关系聚合的方法,例如:

1
2
3
4
5
6
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...
}

如果这是不可能的或不可行的,那么只需进行设置即可基于聚合进行排序,因为我可以从客户端更改表中显示的数据,而无需执行此操作任何过滤。


我最终意识到,当我覆盖get_queryset时,可以将注释放入其中,如下所示:

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

可能应该早点解决这个问题...