Hello, I'm creating a small project to test the use of web2py. After going through some of the documentation for web2py I've found myself in quite a problem to deal with a many to many insert/update form.
The simplified context for the example is this: Model: There are people (person) and each can only have a home (home). Homes (home) have many types of rooms (home_room). Types of rooms (room) are asigned to homes (home). A person can spend an amount of minutes in a specific room of his home (person_room). The table to record the amount of minutes a person spends in a room can have only one record for a person/room of the home. Controller: Index. Show a list of the people in the DB. Register minutes. Shows a list of the rooms available to the person according to the home and process the request to update amount of minutes for each room. View: Index. Displays a list of records for person. Each person links to the register url and using the args sends the person's id. Register minutes. Should display a table (or form) with the rooms and any previous minutes registered to a person so the amounts can be entered or updated. So my problem is creating a table (or form) that presents the left join for home_rooms and person so I can enter the minutes for each room and submit the information. I've been thinking a solution could be to insert first any records from the left join into the person_room table before creating the table (or form), but this still leaves me the problem of showing several records to update the amount of minutes. CODE: Model: <code> db.define_table('room', Field('name', 'string')) db.define_table('home', Field('name', 'string')) db.define_table('home_room', Field('description', 'string'), Field('home_id', 'references home'), Field('room_id', 'references room')) db.define_table('person', Field('name', 'string'), Field('home_id','references home')) db.define_table('person_room', Field('minutes', 'integer'), Field('person_id', 'references person'), Field('home_room_id', 'references home_room')) </code> Data: Home: home.id home.name 1 city 2 beach 3 winter Room: room.id room.name 1 principal 2 secundary 3 living 4 dining 5 gaming Home_Room: home_room.id home_room.description home_room.home_id home_room.room_id 1 city principal 1 1 2 city secondary 1 2 3 city living 1 3 4 beach principal 2 1 5 beach living 2 3 6 beach dining 2 4 7 winter principal 3 1 8 winter living 3 3 9 winter gaming 3 5 Person: person.id person.name person.home_id 1 David 1 2 Sara 2 3 Charles 3 4 Rose 1 5 Fred 2 6 Martin 3 Controllers (default): <code> def index(): ppl = db().select(db.person.id, db.person.name) return dict(people=ppl) def register(): aForm = None aPerson = db(db.person.id==request.args(0, cast=int, otherwise=URL('index') ) ).select(db.person.id, db.person.name, ).first() or redirect(URL('index')) fields = ['person_id', 'home_room_id','minutes'] aForm = SQLFORM(db.person_room, fields=fields) aForm.vars.person_id = aPerson.id aForm.process(keepvalues=True) return dict(person=aPerson, form = aForm) </code> Views: <code> default/index {{extend 'layout.html'}} <table> {{if len(people) == 0:}} <tr><td>There's no information</td></tr> {{else:}} {{for row in people:}} <tr> <td>{{=A('%s'%row.name, _href=URL("register", args=row.id))}}</td> </tr> {{pass}} {{pass}} </table> default/register {{extend 'layout.html'}} <table> <tr>{{=person.name}}</tr> <tr>{{=form or ''}}</tr> </table> </code> -- Resources: - http://web2py.com - http://web2py.com/book (Documentation) - http://github.com/web2py/web2py (Source code) - https://code.google.com/p/web2py/issues/list (Report Issues) --- You received this message because you are subscribed to the Google Groups "web2py-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to web2py+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/web2py/8c397a93-79f8-43e5-8967-759ebb9611b2%40googlegroups.com.