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