Let's say i have a table like:

db.define_table('item_quantity',
  Field('item', db.item,
        requires=IS_IN_DB(db, db.item.id,'%(name)s'),
        represent=lambda x: x.name),
  Field('quantity', 'double', notnull=True, default=0.0,
        comment="in ounces"),
  Field('name', length=500, notnull=True, unique=True,
        requires=IS_NOT_IN_DB(db, 'item_quantity.name'),
        compute=lambda r: str(db.item[r.item].name) + ': ' + str(r.quantity) 
+" oz"),
  format='%(name)s',
  migrate=migrate)

if I do:
    form = SQLFORM(db[request.args[0]], id)
the computed field is not shown at all.  when i'm editing a row it would be 
nice to see what the current value of the computed field is, as a read-only 
field.

i learned that i can do this:
    #make compute fields read-only in the forms
    for f in db[request.args[0]]:
        if f.compute:
            f.writable=False
    #include all fields, include compute fields, in the forms
    fields = [f.name for f in db[request.args[0]] if (f.writable or 
f.readable)]
    form = SQLFORM(db[request.args[0]], id, fields=fields)

to achieve this behavior.  Would it be bad to add an option to SQLFORM to do 
this automagically?

thanks,

christian

Reply via email to