有没有办法使用sqlalchemy-datatables修改表数据?

时间:2018-09-25 23:58:17

标签: python jquery flask datatables sqlalchemy

我今天花了一些时间玩sqlalchemy-datatables。我的目标是简单地实现将查询数据ajax加载到数据表以及分页中。这些很容易处理。

到目前为止,最大的障碍是缺乏文档,尽管该模块的使用似乎相当不错。顺便说一句,如果有人知道一些文档,请分享!

尽管如此,并且经过反复试验,我仍然能够使下面的代码正常工作(为简洁起见,我特意省去了我的模型)。

从视图出发的路线

@app.route('/accounts/query/<path:select>/', methods=['GET'])
@roles_accepted('admin', 'copy', 'client')
def query_accounts(select):
    if select == 'all':

        client = db.aliased(User)
        csr = db.aliased(User)

        columns = [
            ColumnDT(Account.id),
            ColumnDT(Account.name),
            ColumnDT(client.fullname),
            ColumnDT(csr.fullname),
            ColumnDT(client.current_login_at)
        ]

        query = db.session.query() \
                    .select_from(Account) \
                    .outerjoin(client, Account.owner) \
                    .outerjoin(csr, Account.copywriter)

        params = request.args.to_dict()
        rowTable = DataTables(params, query, columns)

        return jsonify(rowTable.output_result())

    return abort(404)

模板中的html

<table class="table" id="datatable">
  <thead>
    <tr>
      <th>ID</th>
      <th>Name</th>
      <th>Client</th>
      <th>CSR</th>
      <th>Last Access</th>
    </tr>
  </thead>
  <tbody></tbody>
</table>

模板中的javascript

$(document).ready(function () {
  $('table.table').dataTable({
    "processing": true,
    "serverSide": true,
    "ajax":"{{ url_for('query_accounts', select='all') }}",
    "order": [1, 'asc']
  });
});

我剩下的几个争论点之一是:由于所有数据表信息都是由jquery-datatables模块绘制的,而sqlalchemy-datatables正在提供该信息,所以我看不到一种能够像我通常在几乎所有其他已使用的数据表中所做的那样,自定义表中的数据(请参见下面的示例,该示例在行内创建指向特定用户记录的链接)。

<table class="table" id="datatable">
  <thead>
    <tr>
      <th>Email</th>
      <th>First Name</th>
      <th>Last Name</th>
      <th>Business Name</th>
      <th>Last Login</th>
      <th>Roles</th>
    </tr>
  </thead>
  <tbody>
    {% for user in users %}
    <tr>
      <td><a href="{{ url_for('users', id=user.id) }}">{{ user.email }}</a></td>
      <td>{{ user.first_name }}</td>
      <td>{{ user.last_name }}</td>
      <td>{{ user.business_name }}</td>
      <td>{{ user.last_login_at|local_datetime }}</td>
      <td>{{ user.roles|rolesformat }}</td>
    </tr>
    {% endfor %}
  </tbody>
</table>

有没有办法在sqlalchemy-datatables创建的表中创建这样的链接?

1 个答案:

答案 0 :(得分:0)

经常发生的情况是,整夜的睡眠和对问题的重新审视都会产生结果。

这个问题实际上与sqlalchemy-datatables无关,而是更多关于datatables本身。我在这里找到了答案:https://datatables.net/manual/data/renderers,它讨论了如何在呈现表数据时对其进行修改。

这是可以使用ID将我表中的名称数据转换为链接的有效javascript。

$(document).ready(function () {
    var table = $('table.table').dataTable( {
        "processing": true,
        "serverSide": true,
        "ajax":"{{ url_for('query_accounts', select='all') }}",
        "order": [1, 'asc'],
        /* render name column strings as links */
        "columnDefs": [ {
            "targets": 1,
            "data": null,
            "render": function (data, type, row, meta) {
                return "<a href='{{ url_for('accounts') }}" + data[0] + "/'>" + data[1] + "</a>";
            }
        } ]
    } );
});