Here a other design I would implement... http://developer.android.com/resources/articles/contacts.html
<http://developer.android.com/resources/articles/contacts.html>Maybe not the MIME type, but to normalize the relation in : Entity : Master result Repeated result Relation Master result one2many Repeated result With this schema the repeated result will be normalize level 1 since you have to identify each record refer to wich time point for example... So you get : Attributes Master result : Date Tech Comment Repeated result result time point FK master result Example many results in repeated result : result1, tp0, FK1 result2, tp1, FK1 result3, tp2, FK1 result1, tp0, FK2 result2, tp1, FK2 result3, tp2, FK2 Normalize level 1 cause of TP So I would do this : Entity : Master result Repeated result Time point Relation Master result one2many Repeated result Repeated result one2many Time point So now : Repeated result result1, FK1, FKTP1 result2, FK1, FKTP2 result3, FK1, FKTP3 result1, FK2, FKTP1 result2, FK2, FKTP2 result3, FK2, FKTP3 Time point id, tp 1, TP0 2, TP1 3, TP2 The form has to manage the insertion, update, read in 2 tables at a time since the time point records should be pretty much fixed. I think the Android contact interface and the google Contact are pretty much good example of what I would achieve. Richard On Wed, Feb 2, 2011 at 10:57 PM, Richard Vézina <ml.richard.vez...@gmail.com > wrote: > Ref about my search on this topic : > > RANDOM : NO ORDER > > Here the funding thread of WTForms FormBase : > http://groups.google.com/group/wtforms/browse_frm/thread/c8b5f5d98c41a6d2/6e69c5c4e820fd7b?lnk=gst&q=subform#6e69c5c4e820fd7b > > > <http://groups.google.com/group/wtforms/browse_frm/thread/c8b5f5d98c41a6d2/6e69c5c4e820fd7b?lnk=gst&q=subform#6e69c5c4e820fd7b> > Subform seems a long awaiting feature : > > http://groups.google.com/group/web2py/browse_thread/thread/8d50fd87d0f2e233?pli=1 > http://groups.google.com/group/web2py/browse_thread/thread/4cc5d30600c628bb > > http://web2py.uservoice.com/forums/42577-general/suggestions/525773-create-a-new-form-system-?ref=title > > Here the funding thread of WTForms FormBase : > http://groups.google.com/group/wtforms/browse_frm/thread/c8b5f5d98c41a6d2/6e69c5c4e820fd7b?lnk=gst&q=subform#6e69c5c4e820fd7b > > Looks like a solution : > > http://wtforms.simplecodes.com/ > > Django inline formset : > > http://docs.djangoproject.com/en/dev/topics/forms/modelforms/#inline-formsets > > There is also this : > http://code.google.com/p/django-dynamic-formset/ > That I already post above... That is something like what I did on cocaine > for django ;-) > > Richard > > On Wed, Feb 2, 2011 at 10:34 PM, Richard Vézina < > ml.richard.vez...@gmail.com> wrote: > >> The app I had attached in the preceding email works, but it broke the >> workflow. I can't get the added inputs values in form.vars, so I take them >> from request.vars or somewhere else don't remember... >> >> There is also an other problem with this hack... It not uses de validators >> for all the inputs... So as long as there is one filled input the form >> submit and the other added inputs will let pass empty value or if you prefer >> NULL will be inserted. >> >> But at least you will be able to add all the field you want no matter how >> many field the subform contain... Remove the added field you no more want if >> you add to much inputs. >> >> Submit and the data will be all linked or related to the id of the record >> of the "master" table or the base table form. >> >> The jQuery script has to be edited by hand for each subform (or subtable >> you use). If you modify your subtable (add a field) you will have to go >> change the jQuery script... I just tried to make a proof of concept and see >> what were the limits... So nothing fancy with the code. There is also a >> couple of jQuery lines that were not working properly in this version I >> think. >> >> Ha yeah there is an other issue on read or update... There is no way to >> make it works with crud.read or crud.update (I did not try anything about >> that when I realize I broked the workflow). >> >> Also, there is no way to make SQLFORM.factory works on update or read >> (edit your linked data)... At least there is no easy already available way. >> You have to crud.update on subtable and master table independantly to make >> any change after the first seizure. >> >> I did not have time last week to continue to work on that. >> >> I identified differents alternatives that I did not explored in details >> yet : >> >> 1) There is a "lib" in django for doing exactly that. I don't know django, >> but the basic (tutorial 1, 2, 3, 4). >> >> 2) There is also Pyjamas that could be use into web2py... It seems to me >> the most cumbersome alternative, since I have to learn many differents >> things. >> >> 3) WTForms... I also have to learn a lot to figure out if it could work >> with web2py or if it has to be stand alone. If it needs work separately I >> actualy think to explore if a loosely coupled framework could be more >> reliable for my needs (Flask, WTForms, WSGI, jinja...) >> >> That where I am... >> >> I appreciate any help to push further the reflexion or build something... >> >> Richard >> >> >> On Wed, Feb 2, 2011 at 6:45 PM, skwasha <sas...@umich.edu> wrote: >> >>> I'm curious if you ever got this all figured out? I wanna do something >>> similar (allow users to create lists of things of arbitrary list >>> length.) I'm new to web2py myself, so if you had something working >>> you'd be willing to share it'd be of great interest/help. >>> >>> thanx >>> >>> On Jan 24, 11:27 am, Richard Vézina <ml.richard.vez...@gmail.com> >>> wrote: >>> > Found this : >>> > >>> > http://code.google.com/p/django-dynamic-formset/ >>> > >>> > <http://code.google.com/p/django-dynamic-formset/>Richard >>> > >>> > On Fri, Jan 21, 2011 at 3:34 PM, Richard Vézina < >>> ml.richard.vez...@gmail.com >>> > >>> > >>> > >>> > > wrote: >>> > > Hello, >>> > >>> > > Here a version 0.00001 pre pre before alpha [?] >>> > > (see attachement) >>> > >>> > > But it works... >>> > >>> > > There is code in : >>> > >>> > > layout.html in head : js that I move there to get debug web2py button >>> (no >>> > > view) >>> > > default controller : register_new function and a couple of other >>> functions >>> > >>> > > default/register_new >>> > >>> > > Add row button add all the rows you want. Fill it up submit... Go >>> admin >>> > > db.address see that there is a row for each added input for street >>> and city. >>> > >>> > > Didn't test it to much. >>> > >>> > > I had to use request.vars to get street2, city2, etc. inputs that >>> were >>> > > filtered by .accept() >>> > >>> > > Validators not working for the added inputs... If one input is fill >>> for >>> > > required field it will pass and null will be entered in db.address >>> for empty >>> > > input. >>> > >>> > > Richard >>> > >>> > > On Wed, Jan 19, 2011 at 10:21 AM, Richard Vézina < >>> > > ml.richard.vez...@gmail.com> wrote: >>> > >>> > >> If you move the script into the layout.html in the head it still >>> works... >>> > >> You can then remove the view /view/default/register.html_ >>> > >>> > >> So you get access to admin, request, session, response button to see >>> what >>> > >> going. You can see that city2 vars is store in session for example. >>> > >>> > >> Richard >>> > >>> > >> On Wed, Jan 19, 2011 at 10:17 AM, Richard Vézina < >>> > >> ml.richard.vez...@gmail.com> wrote: >>> > >>> > >>> For now only adding and removing city input. I clone city input >>> retag >>> > >>> id='city' to id='city2' for the first clone and so on. I change all >>> the id >>> > >>> attribute of other tag cloned like divs. I had a garbage can icon >>> and make >>> > >>> it mouseover. That it for now. >>> > >>> > >>> Since I change the id of input to city2, city3 all those cloned >>> input are >>> > >>> not consider by the register controller for now. I have to figure >>> out how >>> > >>> _filter_fields works to modifying it (add regex hope it will work). >>> Then I >>> > >>> would like the controller to add as many rows in the "subform" or >>> table2 >>> > >>> (address table) as there is cloned city input fields. >>> > >>> > >>> If I am not changing the id of input it will not be w3c html >>> compliant, >>> > >>> but web2py will insert all the added input filled into city field >>> of address >>> > >>> table like this : >>> > >>> > >>> |city1|city2|city3|etc| >>> > >>> > >>> Not bad but not normalized schema and possibly problematic if >>> length of >>> > >>> city field is fixed or using to much space for nothing. >>> > >>> > >>> If you feel that you know how to modify register function I will be >>> glad >>> > >>> for your help. >>> > >>> > >>> When it read, we could had a new recipe into the book ;-) >>> > >>> > >>> Richard >>> > >>> > >>> On Wed, Jan 19, 2011 at 9:48 AM, mart <msenecal...@gmail.com> >>> wrote: >>> > >>> > >>>> Excellent! je prends le train, direction MTL, a tous les quelques >>> mois >>> > >>>> pour me rendre au bureau (peut-etre un peu moins souvent l'hiver >>> ;) ) >>> > >>> > >>>> SO, I have a question: Once, I use the button to add a field >>> (which >>> > >>>> does work well), what should be the expected back-end result? does >>> one >>> > >>>> of the tables get updated? or should a new table get generated >>> based >>> > >>>> on input type? How about a Field name? generic one name fits all >>> (or >>> > >>>> depends on type?) >>> > >>> > >>>> Mart :) >>> > >>> > >>>> On Jan 19, 9:12 am, Richard Vézina <ml.richard.vez...@gmail.com> >>> > >>>> wrote: >>> > >>>> > ;-) Originellement oui... >>> > >>> > >>>> > I would tell you on the orther thread that I post this one... I >>> will >>> > >>>> do it >>> > >>>> > just for the one that fall on the orther thread so they could >>> keep >>> > >>>> track... >>> > >>> > >>>> > I continue today working on this. >>> > >>> > >>>> > Richard >>> > >>> > >>>> > On Wed, Jan 19, 2011 at 12:30 AM, mart <msenecal...@gmail.com> >>> wrote: >>> > >>>> > > Hey, es-tu de Montreal? >>> > >>> > >>>> > > On Jan 18, 7:08 pm, Richard Vézina < >>> ml.richard.vez...@gmail.com> >>> > >>>> > > wrote: >>> > >>>> > > > I forgot to paste : >>> > >>> > >>>> > > > def register(): >>> > >>>> > > > form=SQLFORM.factory(db.client, db.address, formstyle = >>> > >>>> 'divs') #, >>> > >>>> > > > table_name='dummy_name') >>> > >>>> > > > if form.accepts(request.vars): >>> > >>>> > > > id = >>> > >>>> db.client.insert(**db.client._filter_fields(form.vars)) >>> > >>>> > > > form.vars.client=id >>> > >>>> > > > id = >>> > >>>> db.address.insert(**db.address._filter_fields(form.vars)) >>> > >>>> > > > response.flash='Thanks for filling the form' >>> > >>>> > > > return dict(form=form) >>> > >>> > >>>> > > > What to do for what in red? >>> > >>> > >>>> > > > I think _filter_fields is the key of the problem... >>> > >>> > >>>> > > > I didn't have a look to it actually... >>> > >>> > >>>> > > > Richard >>> > >>> > >>>> > > > On Tue, Jan 18, 2011 at 7:00 PM, Richard Vézina < >>> > >>>> > > ml.richard.vez...@gmail.com >>> > >>> > >>>> > > > > wrote: >>> > >>>> > > > > Hello Massimo, >>> > >>> > >>>> > > > > I am trying to insert data in 2 tables from one form... I >>> would >>> > >>>> like to >>> > >>>> > > be >>> > >>>> > > > > able to insert any number of rows or records in the >>> subtable. >>> > >>> > >>>> > > > > I build this test app (see attach)... All the work I did >>> is >>> > >>>> mostly in >>> > >>>> > > > > /default/register.html where there is jQuery script that >>> allow >>> > >>>> adding >>> > >>>> > > new >>> > >>>> > > > > city input and delete new city input... >>> > >>> > >>>> > > > > I built it from scratch for Web2py inspired by : >>> > >>> > >>>> >>> http://charlie.griefer.com/blog/index.cfm/2009/9/17/jQuery--Dynamical. >>> > >>>> > > .. >>> > >>> > >>>> > > > > What should I do in register to allow the function to >>> insert all >>> > >>>> the >>> > >>>> > > filled >>> > >>>> > > > > city clone field?? >>> > >>> > >>>> > > > > Next step will be adapted my script that it manage all the >>> > >>>> subform >>> > >>>> > > columns >>> > >>>> > > > > instead of only one. >>> > >>> > >>>> > > > > Thanks. >>> > >>> > >>>> > > > > Richard >>> > >>> > 330.gif >>> > < 1KViewDownload >> >> >> >