Thanks Richard, I should have provided more details.

When I tried to create a form using SQLFORM.factory for two tables 
(including auth_user), I would get an error that the auth_user email and 
username existed even if I wasn't updating those fields.  It appears that 
the validator to assure those fields are unique does not exclude the 
current values.  I was able to fix this by adding these before calling 
SQLFORM.factory:

    emails = db(db.auth_user.email != user.email)
    db.auth_user.email.requires = IS_NOT_IN_DB(emails, 'auth_user.email')
    usernames = db(db.auth_user.username != user.username)
    db.auth_user.username.requires = IS_NOT_IN_DB(usernames, 
'auth_user.username')

My entire function to create an edit form for two tables:

def edit():
    
    investor = db.investor(request.args(0)) or redirect(URL('index'))
    user = db.auth_user(investor.auth_user)

    emails = db(db.auth_user.email != user.email)
    db.auth_user.email.requires = IS_NOT_IN_DB(emails, 'auth_user.email')
    usernames = db(db.auth_user.username != user.username)
    db.auth_user.username.requires = IS_NOT_IN_DB(usernames, 
'auth_user.username')

    db.auth_user.password.writable = False
    db.investor.auth_user.readable = False
    db.investor.auth_user.writable = False

    form = SQLFORM.factory(db.auth_user, db.investor)

    for f in db.investor.fields:
        form.vars[f] = investor[f]
    for f in db.auth_user.fields:
        form.vars[f] = user[f]

    if form.validate():
        investor.update_record(**db.investor._filter_fields(form.vars))
        user.update_record(**db.auth_user._filter_fields(form.vars))
        session.flash = '%s updated!' % table._singular
        redirect(URL(request.controller, 'list'))
    elif form.errors:
        response.flash = 'Please correct the errors'

    response.view = 'template/edit.html'
    return dict(item_name=table._singular, form=form)

Now I'm working on a readonly form but the readonly option for 
SQLFORM.factory doesn't display the values from form.vars so I may just 
generate the form manually.

On Wednesday, April 20, 2016 at 3:58:37 PM UTC-4, Richard wrote:
>
> Hello Michael,
>
> I am not sure to understand what you are trying to acheive exactly and 
> what is causing issue...
>
> On Wed, Apr 20, 2016 at 2:18 PM, Michael Beller <mjbe...@gmail.com 
> <javascript:>> wrote:
>
>>
>> The approach in the book for one form for multiple tables works well for 
>> create forms:
>>
>> http://web2py.com/books/default/chapter/29/07/forms-and-validators#One-form-for-multiple-tables
>>
>> I have not found a good method for view or update forms.
>>
>> I have a model:
>>
>> db.define_table('buyer', Field('auth_user', 'reference auth_user', ...)
>> db.define_table('seller', Field('auth_user', 'reference auth_user', ...)
>>
>> Each buyer is associated with one user and each seller is associated with 
>> one user.  I'd like to have one form to view and edit each buyer and seller 
>> that includes their user profile.
>>
>> I've tried variations of
>>
>> https://groups.google.com/forum/#!searchin/web2py/sqlform.factory$20edit/web2py/fvzIHyN7eP4/ZixpDiTl1GUJ
>> and
>> https://groups.google.com/forum/#!topic/web2py/hpH7a3Qz3Wg
>>
>> Has anybody found a good solution?
>>
>> -- 
>> 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+un...@googlegroups.com <javascript:>.
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>

-- 
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.
For more options, visit https://groups.google.com/d/optout.

Reply via email to