Есть ли способ изменить данные таблицы с помощью sqlalchemy-datatables? - PullRequest
0 голосов
/ 26 сентября 2018

Я провел некоторое время, играя с 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 голосов
/ 26 сентября 2018

Как это часто бывает, ночной сон и свежий взгляд на проблему дадут результаты.

Этот вопрос на самом деле не имеет ничего общего с sqlalchemy-datatables, но вместо этого был больше о самих datatables.Я нашел свой ответ здесь: https://datatables.net/manual/data/renderers, в котором обсуждается, как изменять данные таблицы по мере их визуализации.

Вот рабочий 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>";
            }
        } ]
    } );
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...