I'm having a similar issue using SQLFORM. I am using a table that stores extra data for users, and I call it auth_user_extended:
db.define_table('auth_user_extended', Field('auth_user', db.auth_user, readable=False, writable=False), Field('supervisor', 'boolean', label='Is Supervisor?', default=False), Field('status', 'integer', requires=IS_IN_SET(db.auth_user_extended_status_types), default=1, notnull=True), Field('legal_name', length=255, notnull=True), Field('secondary_email', length=255), Field('primary_phone', length=20), Field('secondary_phone', length=20), Field('start_date', 'datetime'), Field('end_date', 'datetime'), Field('barcode_id', length=12, notnull=True, unique=True), #requires=IS_NOT_IN_DB(db, 'auth_user_extended.barcode_id')), Field('alliance_id', length=10, default=None), # this is the user's Alliance ID. If this is None, it defaults to auth_user.username. Field('supervisor_auth_user', db.auth_user, label='User\'s Supervisor', ondelete='NO ACTION'), Field('assistant_to_auth_user', db.auth_user, label='Assistant To User', ondelete='NO ACTION'), Field('vacation_minutes', 'decimal(10,2)', default=0, requires=IS_NOT_EMPTY(), notnull=True), Field('personal_minutes', 'decimal(10,2)', default=0, requires=IS_NOT_EMPTY(), notnull=True), Field('sick_minutes', 'decimal(10,2)', default=0, requires=IS_NOT_EMPTY(), notnull=True), Field('holiday_minutes', 'decimal(10,2)', default=None), # setting this field to None makes it default to the holiday's holiday_minutes setting Field('picture', 'upload', uploadfolder=os.path.join(request.folder,'static/images/user-pictures')) ) I'm trying to use this code: form = SQLFORM(db.auth_user, row.auth_user) form.append(SQLFORM(db.auth_user_extended, row.auth_user_extended)) But I've also tried making a form for auth_user_extended by itself and I still get the same problem: 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. Traceback (most recent call last): File "/var/web2py/gluon/restricted.py", line 205, in restricted exec ccode in environment File "/var/web2py/applications/bonfire/controllers/administration.py" <https://apps.bnl.com/admin/edit/bonfire/controllers/administration.py>, line 292, in <module> File "/var/web2py/gluon/globals.py", line 175, in <lambda> self._caller = lambda f: f() File "applications/bonfire/modules/core.py", line 473, in f return action(*a, **b) File "/var/web2py/applications/bonfire/controllers/administration.py" <https://apps.bnl.com/admin/edit/bonfire/controllers/administration.py>, line 286, in users return update() File "/var/web2py/applications/bonfire/controllers/administration.py" <https://apps.bnl.com/admin/edit/bonfire/controllers/administration.py>, line 232, in update form.append(SQLFORM(db.auth_user_extended, row.auth_user_extended)) File "/var/web2py/gluon/sqlhtml.py", line 888, in __init__ inp = self.widgets.options.widget(field, default) File "/var/web2py/gluon/sqlhtml.py", line 218, in widget options = requires[0].options() File "/var/web2py/gluon/validators.py", line 471, in options self.build_set() File "/var/web2py/gluon/validators.py", line 458, in build_set records = self.dbset(table).select(*fields, **dd) File "/var/web2py/gluon/dal.py", line 8004, in __call__ query = query._id>0 File "/var/web2py/gluon/dal.py", line 7165, in __getattr__ return self[key] File "/var/web2py/gluon/dal.py", line 7105, in __getitem__ return dict.__getitem__(self, str(key)) KeyError: '_id' I just updated to the latest trunk and started having this issue.