使用 django-datatables-view 对自定义列进行排序

Sorting custom columns with django-datatables-view

使用 Django 3,python 3.6,django-datatable-view 1.19.1 尝试使用我的模型中的列创建数据表并在输出列之前进行计算。 我绘制了我需要的所有值,但在尝试对自定义列进行排序后出现错误:

Cannot resolve keyword 'XXXX' into field. Choices are: ...

我找到了一种将列注册为虚拟列的方法,无需数据库源,但它位于 django-datatable-view 0.5.4 文档中,但这些方法不再有效。在上一版本的文档链接中,我需要的信息不可用。

请帮我弄清楚,如何处理模型字段(排序、渲染)中的自定义计算列

现在有点棘手。

定义计算字段:

class ListJson(BaseDatatableView):

columns = ["id", "status_code", "computed_field"]
order_columns = ["id", "status_code"]

# Override render_column method
def render_column(self, row, column):
    if column == "computed_field":
        return row.computed_field()
    else:
        return super(ListJson, self).render_column(row, column)

这允许您return computed_field 方法 value()。

当我们想要对计算字段进行排序时,情况就变得复杂了。在这种情况下,最好在 JavaScript

中禁用服务器端操作
$.extend($.fn.dataTable.defaults, {
    serverSide: false,
});

但是,您将不得不一次 return 所有行,这可能会导致服务器崩溃。

如果你想在后端排序,你需要安排和return带有虚拟字段的适当查询集。

class ListJson(BaseDatatableView):
      def get_initial_queryset(self):
            return qs

只需像 一样构建查询。