Since you are using datatable you do not have mach choice and you have to handle this serverside. You want the json to contain the nationality description instead of the nationality id. This can be done in the controller.
Before you do that two observation: User is a reserved keywork so I am going to use Person. Table Nationality should be defined before table Person to avoid trouble. So, given: db.define_table('Person', 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 = '%(description)s' ) You can do: def user(): import json rows = jdb(db.Person.id>0).select() ids = [row.nationality for row in rows] # find the nationalities mapping = db(db.Nationality.id.belongs(ids)).select().as_dict() # build a mapping in one extra query for row in rows: row.nationality=mapping[row.nationality].description # applly the mapping return dict(formListar=XML(rows.as_json())) On Friday, 12 April 2019 20:58:36 UTC-7, Cristina Sig wrote: > Hello everybody, > > I have two tables and I am working with Datatables and what I would like > to do is use the child row to show more information about a particular row. > For example, on the table I will display first name, last name, username, > and email and on the child or expandable row, I will show the nationality > of that user. > The problem I am having is that when I expand the row, it shows only the > id from the 'User' table and not the description associated to that id. > this is my first time dealing with Datatables so I don't have my > experience with it. > > Any suggestions to solve this issue? > > Thanks :) > > DB > 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' > ) > > > > My controler > def user(): > import json > usuario = json.dumps(db(db.auth_user.id>0).select().as_list()) > return dict(formListar=XML(usuario)) > > > > > My view > <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> > > > > > -- Resources: - http://web2py.com - http://web2py.com/book (Documentation) - http://github.com/web2py/web2py (Source code) - https://code.google.com/p/web2py/issues/list (Report Issues) --- You received this message because you are subscribed to the Google Groups "web2py-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to web2py+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.