数据表对象 ID
Datatables Object ID
我有两个 table,我正在使用 Datatable,我想做的是使用子行来显示有关特定行的更多信息。例如,在 table 上,我将显示名字、姓氏、用户名和电子邮件,而在子行或可扩展行上,我将显示该用户的国籍。
我遇到的问题是,当我展开该行时,它仅显示 'User' table 中的 ID,而不显示与该 ID 关联的描述。
这是我第一次处理数据table,所以我没有这方面的经验。
有什么解决这个问题的建议吗?
db.define_table('User',
Field('first_name', 'string'),
Field('last_name', 'string'),
Field('email','string'),
Field('username','string'),
Field('nationality','reference Nationality', requires = IS_IN_DB(db,db.Nationality.id,'%(description)s')
)
db.define_table('Nationality',
Field('description','string'),
format = '%(descripcion)s'
)
我的控制器
def user():
import json
usuario = json.dumps(db(db.auth_user.id>0).select().as_list())
return dict(formListar=XML(usuario))
//查看//
<script>
var tabla;
$(document).ready(function(){
tabla= $('#tablaGenerica').DataTable({
"data": {{=formListar}},
"scrollX": false,
"dom": 'lrtip',
"searching": true,
"sRowSelect": "single",
"columns": [
{
"class":"details-control",
"orderable":false,
"data":null,
"defaultContent": ""
},
{ data: 'first_name' },
{ data: 'last_name' },
{ data: 'email' },
{ data: 'username' },
]
});
$('#tablaGenerica tbody').on('click', 'td.details-control', function () {
var tr = $(this).closest('tr');
var row = tabla.row( tr );
if ( row.child.isShown() ) {
// This row is already open - close it
row.child.hide();
tr.removeClass('shown');
}
else {
// Open this row
row.child( format(row.data()) ).show();
tr.addClass('shown');
}
} );
function format ( d ) {
// `d` is the original data object for the row
return '<table cellpadding="5" cellspacing="0" border="0" style="padding-left:50px;">'+
'<tr>'+
'<td>Nationality:</td>'+
'<td>'+d.nationality+'</td>'+
'</tr>'+
'</table>';
}
</script>
<table id="tablaGenerica" class="tablaC table-striped hover cell-border" cellspacing="0" width="100%" >
<thead>
<tr>
<th></th>
<th>First name</th>
<th>Last name</th>
<th>Email</th>
<th>Username</th>
</tr>
</thead>
</table>
User
table中的nationality
字段是一个reference
字段,这意味着它存储了来自Nationality
table,而不是 description
。要在 JSON 中包含 Nationality
table 中的 description
字段,您需要在获取数据时进行联接:
def user():
usuario = db(db.User.nationality == db.Nationality.id).select().as_json()
return dict(formListar=XML(usuario))
请注意 Rows
对象有一个内置的 as_json
方法(更方便一些,因为它会自动处理特殊字段类型,例如日期和时间)。
连接两个 table 时,JSON 数组中的每条记录将为每个 table 包含一个单独的对象。所以,JSON 看起来像:
[
{
"User": { "first_name": ..., "last_name": ..., ... },
"Nationality": { "Description": ... }
},
...
]
这意味着 Datatables 的列规范必须更改为:
{ data: 'User.first_name' },
{ data: 'User.last_name' },
{ data: 'User.email' },
{ data: 'User.username' },
请注意,每个字段的 User.
前缀表示嵌套在记录的 User
对象中。
同样,在format
函数中,通过d.Nationality.description
而不是d.nationality
访问国籍描述。
我有两个 table,我正在使用 Datatable,我想做的是使用子行来显示有关特定行的更多信息。例如,在 table 上,我将显示名字、姓氏、用户名和电子邮件,而在子行或可扩展行上,我将显示该用户的国籍。 我遇到的问题是,当我展开该行时,它仅显示 'User' table 中的 ID,而不显示与该 ID 关联的描述。 这是我第一次处理数据table,所以我没有这方面的经验。
有什么解决这个问题的建议吗?
db.define_table('User',
Field('first_name', 'string'),
Field('last_name', 'string'),
Field('email','string'),
Field('username','string'),
Field('nationality','reference Nationality', requires = IS_IN_DB(db,db.Nationality.id,'%(description)s')
)
db.define_table('Nationality',
Field('description','string'),
format = '%(descripcion)s'
)
我的控制器
def user():
import json
usuario = json.dumps(db(db.auth_user.id>0).select().as_list())
return dict(formListar=XML(usuario))
//查看//
<script>
var tabla;
$(document).ready(function(){
tabla= $('#tablaGenerica').DataTable({
"data": {{=formListar}},
"scrollX": false,
"dom": 'lrtip',
"searching": true,
"sRowSelect": "single",
"columns": [
{
"class":"details-control",
"orderable":false,
"data":null,
"defaultContent": ""
},
{ data: 'first_name' },
{ data: 'last_name' },
{ data: 'email' },
{ data: 'username' },
]
});
$('#tablaGenerica tbody').on('click', 'td.details-control', function () {
var tr = $(this).closest('tr');
var row = tabla.row( tr );
if ( row.child.isShown() ) {
// This row is already open - close it
row.child.hide();
tr.removeClass('shown');
}
else {
// Open this row
row.child( format(row.data()) ).show();
tr.addClass('shown');
}
} );
function format ( d ) {
// `d` is the original data object for the row
return '<table cellpadding="5" cellspacing="0" border="0" style="padding-left:50px;">'+
'<tr>'+
'<td>Nationality:</td>'+
'<td>'+d.nationality+'</td>'+
'</tr>'+
'</table>';
}
</script>
<table id="tablaGenerica" class="tablaC table-striped hover cell-border" cellspacing="0" width="100%" >
<thead>
<tr>
<th></th>
<th>First name</th>
<th>Last name</th>
<th>Email</th>
<th>Username</th>
</tr>
</thead>
</table>
User
table中的nationality
字段是一个reference
字段,这意味着它存储了来自Nationality
table,而不是 description
。要在 JSON 中包含 Nationality
table 中的 description
字段,您需要在获取数据时进行联接:
def user():
usuario = db(db.User.nationality == db.Nationality.id).select().as_json()
return dict(formListar=XML(usuario))
请注意 Rows
对象有一个内置的 as_json
方法(更方便一些,因为它会自动处理特殊字段类型,例如日期和时间)。
连接两个 table 时,JSON 数组中的每条记录将为每个 table 包含一个单独的对象。所以,JSON 看起来像:
[
{
"User": { "first_name": ..., "last_name": ..., ... },
"Nationality": { "Description": ... }
},
...
]
这意味着 Datatables 的列规范必须更改为:
{ data: 'User.first_name' },
{ data: 'User.last_name' },
{ data: 'User.email' },
{ data: 'User.username' },
请注意,每个字段的 User.
前缀表示嵌套在记录的 User
对象中。
同样,在format
函数中,通过d.Nationality.description
而不是d.nationality
访问国籍描述。