I am not sure what the purpose of this :
for f in db.investor.fields:
form.vars[f] = investor[f]
for f in db.auth_user.fields:
form.vars[f] = user[f]
And why not using
if form.process().accepted:
Richard
On Thu, Apr 21, 2016 at 2:05 PM, Richard Vézina <[email protected]
> wrote:
> I am not sure, but .factory() should accept readonly=True for read form...
>
> Are you sure you have not any fields with the same name in both tables?
>
> On Thu, Apr 21, 2016 at 2:00 PM, Richard Vézina <
> [email protected]> wrote:
>
>> Michael,
>>
>> About displaying value use default = when you create input field it
>> should be all what you need...
>>
>> About the other problem I don't get it... You should be able to update a
>> record email/username as long as the new value is unique...
>>
>> Richard
>>
>> On Wed, Apr 20, 2016 at 11:43 PM, Michael Beller <[email protected]>
>> 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 <[email protected]>
>>>> 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].
>>>>> 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.
>>>
>>
>>
>
--
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.