compute = lambda statement

is only execute once, when the record is created/updated. Not when you do a 
select.

On Monday, 6 May 2013 09:13:38 UTC-5, Alex Glaros wrote:
>
> Sorry Massimo, I left out part of the data model, which shows that 
> auth_user can't be an element in the Party table.
>
> Party can be either an organization or person, and organizations don't 
> have auth_user fields. See data model examples: 
>
>    - 
>    
> http://www.tsjensen.com/blog/post/2009/01/03/Party+Role+And+Party+Type+In+Data+Model.aspx
>    - http://www.tdan.com/view-articles/5014/
>    - 
>    http://www.essentialstrategies.com/publications/modeling/advanceddm.htm
>    
>
> displayName could contain the name of either a person or an organization.
>
> Here's the real data model
>
> db.define_table('Party', ## super-type for people and organizations
> Field('partyTypeID','reference PartyType'), ## partyType is either person 
> or organization
> Field('displayName','string'))
>
> db.define_table('Organization',
> Field('partyID', 'reference Party'),
> Field('organizationShortName','string'), 
> Field('organizationFullName','string'))
>
> auth.settings.extra_fields['auth_user']= [
>     Field('partyID', 'reference Party'),
>     Field('personMiddleName','string'),
>     Field('gender','string'),    
>   ]
>
> So to get the names to display in a compute = lambda statement, a join 
> would be required every time the table is listed.  I think that would be 
> too big of a database hit. Instead, I can populate displayName but make 
> sure that all update functions keep displayName accurate.
>
> Thanks,
>
> Alex
>
>
> On Monday, May 6, 2013 5:52:48 AM UTC-7, Massimo Di Pierro wrote:
>>
>> You need to link Party to user not vice versa:
>>
>> auth.settings.extra_fields['auth_user']= [
>> #    Field('partyID', 'reference Party'),
>>     Field('personMiddleName','string'),
>>     Field('gender','string'),    
>>   ]
>>
>>
>> db.define_table('Party', ## super-type for people and organizations
>> Field('user_id','reference auth_user'),
>> Field('partyTypeID','reference PartyType'), 
>> Field('displayName','string'))
>>
>> db.Party.displayName.compute = lambda row: "%(first_name)s 
>> %(last_name)s" % db.auth_user[row.user_id]
>>
>>
>>
>> On Monday, 6 May 2013 00:01:17 UTC-5, Alex Glaros wrote:
>>>
>>> In the controller below, how would I get auth_user.*first_name* and 
>>> auth_user.*last_name* (concatenated) into table Party, field *
>>> displayName*?
>>>
>>> In other words, I'd like field displayName to end up with first_name and 
>>> last_name inside it.
>>>
>>> Party is the parent table and auth_user is the child table. Party is a 
>>> super-type that can be either a person or an organization.  
>>>
>>> I think experienced programmers would recommend against hitting the 
>>> database by joining Party table and auth_user table to create on-the-fly 
>>> calculated field  for displayName whenever a list of Party names is 
>>> displayed, right? I just have to be careful to update displayName whenever 
>>> first_name and last_name are subject to change.
>>>
>>> *Controller*
>>>
>>> def add_new_people():   
>>>     db.auth_user.partyID.readable = db.auth_user.partyID.writable = 
>>> False ## don't let user see field thinking they have to fill it in
>>>     db.Party.partyTypeID.readable = db.Party.partyTypeID.writable = 
>>> False ## don't let user see field thinking they have to fill it in
>>>     form=SQLFORM.factory(db.Party,db.auth_user)
>>>     db.Party.partyTypeID.default = 1 ## sets up db so it's a person, 
>>> not organization
>>>     if form.process().accepted:
>>>         partyID = db.Party.insert(**db.Party._filter_fields(form.vars))
>>>         form.vars.partyID=partyID
>>>         partyID = db.auth_user.insert(**db.auth_user._filter_fields(form
>>> .vars))    
>>>         response.flash='Thanks for filling the form'
>>>     return dict(form=form)
>>>
>>>
>>> *Model*
>>>
>>> auth.settings.extra_fields['auth_user']= [
>>>     Field('partyID', 'reference Party'),
>>>     Field('personMiddleName','string'),
>>>     Field('gender','string'),    
>>>   ]
>>>
>>>
>>> db.define_table('Party', ## super-type for people and organizations
>>> Field('partyTypeID','reference PartyType'), 
>>> Field('displayName','string'))
>>>
>>>
>>> thanks,
>>>
>>> Alex Glaros
>>>
>>

-- 

--- 
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/groups/opt_out.


Reply via email to