I would use an intermediate table to achieve the many to many
relationship:
db.define_table('test', Field('name') )
db.define_table('test2', Field('name') )
db.define_table('test_relation',
Field('test', 'reference test2'),
Field('test2, 'reference test'))
test_and_test2 = db((
db.test.id==db.test_relation.test) &
(
db.test2.id==db.test_relation.test2))
for row in test_and_test2.select():
print
row.test.name,
row.test2.name