【问题标题】:Sorting custom columns with django-datatables-view使用 django-datatables-view 对自定义列进行排序
【发布时间】:2020-12-09 19:53:00
【问题描述】:

使用 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 文档中,但这些方法不再起作用。在上一版本中,包含我需要的信息的文档链接不可用。

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

【问题讨论】:

    标签: python-3.x django-3.0 django-datatable


    【解决方案1】:

    现在这有点棘手。

    定义计算域:

    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)
    

    这允许您返回 computed_field 方法 value()。

    当我们要对计算字段进行排序时,情况会变得复杂。在这种情况下,最好在 JavaScript 中禁用服务器端操作

    $.extend($.fn.dataTable.defaults, {
        serverSide: false,
    });
    

    但是,您必须同时返回所有行,这可能会导致服务器崩溃。

    如果要在后端进行排序,则需要安排并返回带有虚拟字段的相应查询集。

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

    只需像THIS 这样构建您的查询。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-28
      • 2013-12-15
      • 1970-01-01
      • 2020-04-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多