Nice. Thank you. Will commit it tonight.

On Jan 18, 1:41 pm, Tsvi Mostovicz <[email protected]> wrote:
> Massimo,
>
> I submitted issue 625 with a patch to populate.py which allows it to take
> the compute field into consideration when populating the database.
>
> Thanks,
>
> Tsvi Mostovicz
> [email protected]/in/tsvim
>
>
>
>
>
>
>
> On Mon, Jan 16, 2012 at 22:45, Anthony <[email protected]> wrote:
> > No, I don't think populate looks at the compute attribute -- it just looks
> > at the field type and generates an appropriate value.
>
> > On Monday, January 16, 2012 3:21:16 PM UTC-5, tsvim wrote:
>
> >> Could be it works, but for populate it doesn't. I was hoping to generate
> >> a rule that would force populate to behave correctly.
> >> For the user I can obviously deal with it in AJAX. Is it possible that
> >> populate disregards the compute field?
>
> >> Tsvi Mostovicz
> >> [email protected]
> >>www.linkedin.com/in/tsvim
>
> >> On Mon, Jan 16, 2012 at 08:35, Anthony <[email protected]> wrote:
>
> >>> db.define_table('accounts',
> >>>>                 Field('name','string'),
> >>>>                 Field('parent_account','**refere**nce accounts'),
> >>>>                 Field('account_type','string')****)
>
> >>>> What I'm trying to achieve is to create a tree-like structure. So we
> >>>> have 5 "root" accounts, which can each hold some sub-accounts etc.
> >>>> Now the account_type must be the same for all the children of a certain
> >>>> account. So the root accounts pre-determine all of the children's account
> >>>> type, rendering it unwritable for a child account.
> >>>> For some reason the following didn't work for me:
>
> >>>> account_types = ['a','b','c']
> >>>> db.accounts.account_type.**requi**res  = IS_IN_SET(account_types)
> >>>> db.accounts.account_type.**requi**red  = True
> >>>> db.accounts.account_type.**compu**te = lambda x:
> >>>> x['parent_account'].account_**ty**pe
> >>>> db.accounts.account_type.**write**able = lambda x:
> >>>> (x['parent_account'] == 0)
>
> >>> For the "compute" attribute, maybe:
>
> >>> db.accounts.account_type.**compute = lambda r:
> >>> db.accounts[r.parent_account].**account_type if r.parent_account else
> >>> None
>
> >>> However, I don't think you can set the "writeable" attribute this way
> >>> because you won't know if a parent account is going to be specified until
> >>> after the new record is submitted, which happens after you have to decide
> >>> whether to make the account_type field writeable. Instead you might need
> >>> some client side JS and Ajax to dynamically set the account_type if the
> >>> user selects a parent_account in the form.
>
> >>> Anthony

Reply via email to