What if you use this inside _filter_fields() instead of form.vars **{k: v for k, v in form.vars.iteritems() if k not in ('username', 'email')}
? On Wed, Apr 20, 2016 at 11:43 PM, Michael Beller <mjbel...@gmail.com> wrote: > 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> >> 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. >>> 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. > -- 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.