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?

-- 



Reply via email to