Python 是否有一种使用sqlalchemy datatables修改表数据的方法?
我今天花了一些时间和你玩。我的目标是简单地实现ajax将查询数据加载到数据表以及分页。它很容易处理这些问题 迄今为止,最大的障碍是缺乏文档,尽管该模块的使用似乎相当不错。另外,如果有人知道一些文档,请分享 尽管如此,经过一些尝试和错误,我还是能够让下面的代码正常工作(为了简洁起见,我特意省略了我的模型) 从视图进行路由Python 是否有一种使用sqlalchemy datatables修改表数据的方法?,python,jquery,flask,datatables,sqlalchemy,Python,Jquery,Flask,Datatables,Sqlalchemy,我今天花了一些时间和你玩。我的目标是简单地实现ajax将查询数据加载到数据表以及分页。它很容易处理这些问题 迄今为止,最大的障碍是缺乏文档,尽管该模块的使用似乎相当不错。另外,如果有人知道一些文档,请分享 尽管如此,经过一些尝试和错误,我还是能够让下面的代码正常工作(为了简洁起见,我特意省略了我的模型) 从视图进行路由 @app.route('/accounts/query/<path:select>/', methods=['GET']) @roles_accepted('admi
@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)
我剩下的几个争论点之一是:由于所有的datatable信息都是由jquery datatables模块绘制的,而sqlalchemy datatables提供了这些信息,因此我无法找到一种方法来定制表中的数据,就像我在几乎所有其他我使用过的datatable中所做的那样(有关在一行中创建指向特定用户记录的链接的示例,请参见下文)
电子邮件
名字
姓
企业名称
最后登录
角色
{users%%中的用户为%s}
{{user.first_name}
{{user.last_name}
{{user.business_name}
{{user.last_login_at | local_datetime}
{{user.roles | rolesformat}}
{%endfor%}
有没有办法在sqlalchemy datatables创建的表中创建这样的链接?正如经常发生的那样,一个晚上的睡眠和对问题的重新审视将产生结果 这个问题实际上与sqlalchemy datatables无关,而更多的是关于datatables本身 下面是使用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>";
}
} ]
} );
});
$(文档).ready(函数(){
变量表=$('table.table')。数据表({
“处理”:对,
“服务器端”:正确,
“ajax”:“{url\u for('query\u accounts',select='all')}”,
“订单”:[1,‘asc’],
/*将名称列字符串呈现为链接*/
“columnDefs”:[{
"目标":一,,
“数据”:空,
“呈现”:函数(数据、类型、行、元){
返回“”;
}
} ]
} );
});
$(document).ready(function () {
$('table.table').dataTable({
"processing": true,
"serverSide": true,
"ajax":"{{ url_for('query_accounts', select='all') }}",
"order": [1, 'asc']
});
});
<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>
$(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>";
}
} ]
} );
});