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.