> > db.define_table("articles", > Field('reference', db.sidemenu, requires=IS_IN_DB(db, 'sidemenu.id', > '%(title)s')), *# here i need smth like : db.sidemenu | db.topmenu ... and > is_in_db(db,'sidemenu.id' or 'topmenu.id')* > Field('image', 'upload'), > Field("title",label=T('Title Ro'),requires=IS_NOT_EMPTY()), > Field("content" ,type='text',label=T('Content > Ro'),requires=IS_NOT_EMPTY()), > Field('added_on', 'date', default=request.now, > requires=IS_DATE(format=T('%d-%m-%Y')), writable=False), > Field('updated_on', 'datetime', default=request.now, > update=request.now, requires=IS_DATETIME(format=T('%d-%m-%Y %H:%M:%S')), > writable=False), > Field('event', 'boolean', default=False), > Field('public', 'boolean', default=True)) >
The records in sidemenu and topmenu will have record ids in common, so you cannot uniquely identify menu items by id across those two tables. Rather than making it a reference field, you can just make it an integer field that stores the record id, and then add a separate field that indicates whether the id in the reference field belongs to the sidemenu or topmenu. This will require some extra logic to handle inserts and queries. There may be a better way. Anthony