I think I understand BUT, if you have a table user and a table address
referencing a user, it means a user can have more than one address.
But I think you expect the form to work as if the system knows that
one person can have only one address. This is why you have to be
explicit:
        user = db((db.user.id == req_user_id) &
                            (db.addr.user == req_user_id)).select()[0]

        db.user.id.default = user.user.id
        db.user.name.default = user.user.name
        db.user.email.default = user.user.email
        db.addr.city.default = user.addr.city

        form = SQLFORM.factory(db.user.name,
db.user.rname,db.addr.city)

    if form.accepts(request.vars, session):

        # change the user data
        if change_user_data(user):
            user.user.update_record(name=form.vars.name) # <----
            user.addr.update_record(city=form.vars.city) # <----
            response.flash = 'form accepted'
        else:
            response.flash = 'form not accepted'
        redirect(URL(r=request,f='index'))


On Oct 27, 7:11 am, znafets <znaf...@googlemail.com> wrote:
> Massimo,
>
> is this sufficient to understand the problem, or should I describe
> further ?
>
> ciao
> Stefan
>
> On 26 Okt., 19:57, znafets <znaf...@googlemail.com> wrote:
>
> > Massimo,
>
> > I am sorry, I will try to be more explicite here:
>
> > the model (two tables user and addr)
>
> > db.define_table('user',
> >                 Field('name', length=12, requires=IS_NOT_EMPTY()),
> >                 Field('alias',length=12 ),
> >                 Field('rname', length=28),
> >                 Field('gender', requires=IS_IN_SET(['Male', 'Female',
> > 'Other'])),
> >                 Field('email', length=12),
> >                 Field('password','password'),
> >                 Field('created_on','date'),
> >                 Field('console','boolean',default=False),
> >                 Field('verification',default=''),
> >                 Field('last_attempt_time','integer',default=0),
> >                 Field('failed_attempts','integer',default=0))
>
> > db.user.name.requires=IS_NOT_IN_DB(db,'user.name',
> >                                         error_message='value already
> > in DB')
> > db.user.password.requires=CRYPT()
> > db.user.email.requires=[IS_EMAIL(),IS_NOT_IN_DB(db,'user.email')]
> > db.user.public_fields=['name', 'alias','rname', 'email','password',
> >                                 'reg_date','console']
> > db.user.public_labels={'name':'User Name', 'alias':'User Alias',
> >                         'rname':'Real Name', 'created_on':'Member
> > since',
> >                         'console':'Console Login'}
>
> > VALID_USER=IS_IN_DB(db(db.user.verification==''),'user.id','%(id)s:%
> > (name)s')
>
> > # addr table
> > db.define_table('addr',
> >                 Field('user', db.user),
> >                 Field('zip'),
> >                 Field('city'),
> >                 Field('street'),
> >                 Field('number'),
> >                 Field('country'),
> >                 Field('phone_short'),
> >                 Field('phone_office'),
> >                 Field('phone_home'),
> >                 Field('phone_mobile'),
> >                 Field('fax'),
> >                 Field('birth', 'date'),
> >                 Field('notes','text'))
>
> > from these two tables I get the record data in the controller function
> > like this:
>
> > def edit_user():
> >     if len(request.args):
>
> >         req_user_id = request.args[0]
>
> >         # if current user is not a member of system manager group
> >         # he cannot edit any records except his own
> >         if not is_member("Systems") and session.user_id != int
> > (req_user_id):
> >             session.flash = 'sorry, no sufficient access rights'
> >             redirect(URL(r=request,f='index'))
>
> >         user = db((db.user.id == req_user_id) &
> >                             (db.addr.user == req_user_id)).select()[0]
>
> >         db.user.id.default = user.user.id
> >         db.user.name.default = user.user.name
> >         db.user.email.default = user.user.email
> >         db.addr.city.default = user.addr.city
>
> >         form = SQLFORM.factory(db.user.name, db.user.rname,
> > db.addr.city)
>
> >    ###
> >    ### this call doesn't work due to no_table issue
> >    ###
> >     if form.accepts(request.vars, session):
>
> >         # change the user data
> >         if change_user_data(user):
> >             response.flash = 'form accepted'
> >         else:
> >             response.flash = 'form not accepted'
> >         redirect(URL(r=request,f='index'))
>
> >     elif form.errors:
> >         response.flash = 'form has errors'
>
> >     return dict(form=form)
>
> > what I would like to do now is to place the fields in the view where I
> > think it males most sense like:
> > name                                    zip   city
> > rname                                  street number
> > etc.
>
> > submit
>
> > after submit the records in both tables should be updated, means when
> > I changed the street the record in addr table gets updated, some field
> > from user table and this one gets updated. It's okay updating all
> > records of both tables when submit button getts pressed.
>
> > I do not have preferences for either SQLFORM or FORM or
> > SQLFORM.factory. What ever is easier and less hard to read.
> > I am also fine with doing plain old HTML manually in the view as long
> > as I can access the field values and place the fields where ever I
> > want them and as long as I can get that information change back to the
> > controller that is supposed to update my records.
>
> > Thanks for getting into it with me.
>
> > ciao
> > Stefan
>
> > On 26 Okt., 19:38, mdipierro <mdipie...@cs.depaul.edu> wrote:
>
> > > Stephan,
>
> > > I think I am not completely understanding what you need. can you make
> > > a concrete example of a model, how the model should look like (use a
> > > drawing or text) and what should happen when the form is submitted?
>
> > > Massimo
>
> > > On Oct 26, 1:33 pm, znafets <znaf...@googlemail.com> wrote:
>
> > > > @weheh: I saw that but couldn't take too much from it
> > > > @Thadeus: Woooa, that looks like for a second generation BF compiler -
> > > > I am blinded :) , thank you anyway
> > > > @Massimo: I knew you would like that highly sophisticated stuff but
> > > > please don't ask me if it helps to solve my problem, or better put: is
> > > > this the only solution to that use case I described ? Then I guess
> > > > this is way out of my league and incomprehensible for my old eyes.
>
> > > > I adored web2py so far for being easy to use and elegant, but in this
> > > > specific case I am willing to rethink that impression in a way that it
> > > > may be easy as long as one stays on well flattened roads leading to
> > > > standard views with minimum customization. Once you are passed that it
> > > > seems to get really hairy.
>
> > > > to recap:
> > > > getting data from two tables displayed in a view with fields that are
> > > > supposed to appear where I want them, pre-filled with the data that is
> > > > already in the db is this the only way to do it in web2py ?
> > > > seriously ? No easier, better, smoother way ?
>
> > > > ciao
> > > > Stefan
>
> > > > On 26 Okt., 18:00, mdipierro <mdipie...@cs.depaul.edu> wrote:
>
> > > > > An aesthetic issue. Consider you can replace:
>
> > > > > {{
> > > > > def req():
> > > > >     return XML('''<span class="required">*</span>''')
>
> > > > > }}
>
> > > > > with
>
> > > > > {{req=SPAN("*",_class="required")}}
>
> > > > > and call it with {{=req}} or
>
> > > > > {{def req():}}<span class="required">*</span>{{return}}
>
> > > > > and call it with {{req()}} (no equal)
>
> > > > > Massimo
>
> > > > > On Oct 26, 11:51 am, Thadeus Burgess <thade...@thadeusb.com> wrote:
>
> > > > > > This is usually what I end up doing for custom form. It allows for 
> > > > > > fully
> > > > > > customizable XHTML/CSS 3 forms.
>
> > > > > > {{
> > > > > > def req():
> > > > > >     return XML('''<span class="required">*</span>''')}}
>
> > > > > > {{pass}}
>
> > > > > > {{def labels(field, required):}}
> > > > > >                 <label for="{{=field}}" id="{{=field}}__label"
> > > > > > class="title">{{=form.custom.label[field]}}{{if
> > > > > > required:}}{{=req()}}{{pass}}</label>
> > > > > >                 <label for="{{=field}}" id="{{=field}}__comment"
> > > > > > class="comment">{{=form.custom.comment[field]}}</label>
> > > > > >                 <label for="{{=field}}" id="{{=field}}__error"
> > > > > > class="error">{{if
> > > > > > form.errors.has_key(field):}}{{=form.errors[field]}}{{pass}}</label>
> > > > > > {{pass}}
>
> > > > > > {{def li(field, required=True):}}
> > > > > >         <li {{if form.errors.has_key(field):}}class="err"{{pass}}>
> > > > > >             <div class="labels">
> > > > > >                 {{labels(field, required)}}
> > > > > >             </div>
> > > > > >             {{=form.custom.widget[field]}}
> > > > > >         </li>
> > > > > > {{pass}}
>
> > > > > > {{=form.custom.begin}}
>
> > > > > > <fieldset>
> > > > > >     <legend></legend>
> > > > > >     <ol>
> > > > > >         {{li('signup_code')}}
> > > > > >     </ol>
> > > > > > </fieldset>
>
> > > > > > <fieldset>
> > > > > >     <ol>
> > > > > >         <li>
> > > > > >             <div class="labels">
> > > > > >                 <label for="submit" class="title">Click to finish 
> > > > > > and submit
> > > > > > your information.</label>
> > > > > >             </div>
> > > > > >             <input type="submit" class="submit" value="Submit" />
> > > > > >         </li>
> > > > > >     </ol>
> > > > > > </fieldset>
>
> > > > > > {{=form.custom.end}}
>
> > > > > > -Thadeus
>
> > > > > > On Mon, Oct 26, 2009 at 7:43 AM, weheh <richard_gor...@verizon.net> 
> > > > > > wrote:
>
> > > > > > >http://groups.google.com/group/web2py/browse_thread/thread/c6e3021507...
>
> > > > > > > On Oct 26, 7:55 am, znafets <znaf...@googlemail.com> wrote:
> > > > > > > > the call to form.accepts fails with "key error" no-table ... 
> > > > > > > > after the
> > > > > > > > form gets submitted...
>
> > > > > > > >   if form.accepts(request.vars, session):
>
> > > > > > > > On 26 Okt., 11:05, znafets <znaf...@googlemail.com> wrote:
>
> > > > > > > > > Hi Thadeus, weheh,
>
> > > > > > > > > if I make it read like this:
>
> > > > > > > > >         req_user_id = request.args[0]
>
> > > > > > > > >         user = db((db.user.id == req_user_id) &
> > > > > > > > >                             (db.addr.user == 
> > > > > > > > > req_user_id)).select()[0]
>
> > > > > > > > >         db.user.id.default = user.user.id
> > > > > > > > >         db.user.name.default = user.user.name
>
> ...
>
> read more »
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To post to this group, send email to web2py@googlegroups.com
To unsubscribe from this group, send email to 
web2py+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/web2py?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to