Hi all,
How to solve this:
There are two tables, table "xref" has two fields with a reference to table
"table". Look at the format of "table".
db.define_table('table',
Field('name', type='string'),
Field('number', type='integer'),
auth.signature,
format= lambda row: str(row.number) + ' (' +row.name + ')', ## @1
migrate=settings.migrate)
db.define_table('xref',
Field('t1_ref', type='reference table',
widget =
SQLFORM.widgets.autocomplete(request, db.table.id, id_field=db.table.id)),
Field('t2_ref', type='reference table',
widget =
SQLFORM.widgets.autocomplete(request, db.table.id, id_field=db.table.id)),
auth.signature,
migrate=settings.migrate)
Now if in the controller I define
form = crud.update(db.xref, record) to update one record in
xref, or
form = crud.create(db.xref) to create a new record in xref
the autocomplete widget always returns the ids of the table "table", not the
required format (see @1).
The required format is shown correctly only with crud.read, or when in
crud.update the property writabe of the field is set to False,
for example as below:
def edit():
record = db.xref(request.args(0))
form = crud.update(db.xref, record)
db.xref.t1_ref.writable = False
return dict(form=form)
In this case the field t1_ref is represented correctly (as @1), the field
t2_ref shows an autocomplete widget with only ids of table.
How to make that the autcomplete widget shows always a list formatted as in
@1, and not just the ids of the referenced table?
--