Thanks, I came up with this: db.thing._after_insert.append(lambda f,id: db(db.person.id==f['owner_id']).update(total_items=len(db(db.thing.owner_id==f['owner_id']).select())))
It works, but is there is a better way to do this? Also, can someone help me with _after_delete? _after_delete gives me a set of db.thing.id, and I'm not sure how to use this to update the db.persons.total_items field. On Tuesday, January 14, 2014 8:50:38 AM UTC-5, Anthony wrote: > > If you want db.person to be updated upon changes to db.thing, instead of a > computed field in db.person, you probably want to create _after_insert and > _after_update callbacks for db.thing (see > http://www.web2py.com/books/default/chapter/29/06/the-database-abstraction-layer#before-and-after-callbacks > ). > > Anthony > > On Tuesday, January 14, 2014 12:48:59 AM UTC-5, Apple Mason wrote: >> >> In the online doc on computed field, the computed fields uses a field in >> the current table, and not in another table. >> >> I modified the one-to-many example by adding a 'total_items' field on >> person. If I want 'total_items' to be the sum of all items the person >> currently has, and this field should be updated when an inserted/deleted >> 'thing' for this person happens, what should computed be? >> >> >> >>> db.define_table('person', >> Field('name'), >> Field('total_items', 'integer', compute=#lamdba r: >> r.??), # what should go here? >> format='%(name)s') >> >>> db.define_table('thing', >> Field('name'), >> Field('owner_id', 'reference person'), >> format='%(name)s') >> >> -- 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/groups/opt_out.