I defined the following tables:
db.define_table('nav',
Field('navbarID','reference
navbar',default='',requires=IS_IN_DB(db,'navbar.id','%(name)s',zero=T('select
a value')),notnull=True),
Field('name',length=32,default='',requires=[IS_LENGTH(32,error_message=T('length
exceeds 32 characters')),IS_NOT_EMPTY()],notnull=True),
Field('backendcontroller',length=32,default='',requires=IS_LENGTH(32,error_message=T('length
exceeds 32 characters'))),
Field('frontendcontroller',length=32,default='',requires=IS_LENGTH(32,error_message=T('length
exceeds 32 characters'))),
Field('function',length=32,default='',requires=[IS_LENGTH(32,error_message=T('length
exceeds 32 characters')),IS_NOT_EMPTY()],notnull=True),
format='%(name)s',
migrate=False)
db.define_table('nodeNav',
Field('nodeID','reference node',**isnode),
Field('navID','reference nav',default='',notnull=True'),
Field('backend',type='boolean',default=False),
Field('frontend',type='boolean',default=False),
on_define=set_requirement,
migrate=False)
Given the following records in nodeNav:
4 6 True True
4 7 True False
4 8 True False
4 9 True True
I'd like to create a form in which every record is a field, the name should
be the navID, the label should be the name in table nav, the field should
be of type boolean and its value should be the value of frontend.
I thought of something like:
query=db((db.nodeNav.nodeID==4)&(db.nodeNav.navID==db.nav.id)&(db.nav.navbarID==3))
records=query.select(db.nodeNav.ALL,db.nav.ALL)
fields_list=[]
for r in records:
fields_list.append(Field(name=str(r.nav.id),type='boolean',default=r.nodeNav.frontend,label=r.nav.name))
form=SQLFORM.factory(*fields_list)
if form.process().accepted:
records=query.select(db.nodeNav.ALL)
for r in records:
field=r.navID
r.update_record(frontend=form.vars.field)
return dict(form=form)
Is this the way to go or is there a better way to implement this?
Kind regards,
Annet
--