Also not sure what investor contains here :
if form.validate():
investor.update_record(**db.investor._filter_fields(form.vars))
Is it a row or the db table (db.investor)??
If it is a row, I am not sure if your issue wouldn't come from the way you
use update_record() as it make a row update hit the database... So, maybe
you try to update another record than the one you think you are updating...
try :
db(db.investor.id ==
form.vars.investor_id_field_name).update(...filter_fields...)
You need a way to specify the record you are updating...
On Thu, Apr 21, 2016 at 2:12 PM, Richard Vézina <[email protected]
> wrote:
> 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.