+1

On Jul 22, 7:08 pm, "mr.freeze" <[email protected]> wrote:
> Assuming you meant:
> r.y.y.y.t
> It works because db.a.y is a self referencing field. Inserting into
> db.a doesn't return an int, but a Reference, which has a __getattr__
> that returns the record it references. Any number of y's should work:
> r.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.t
> 't' is the virtual field which returns the length of the computed
> field, which in turn is 3*x. 'x' in this case is 'hello', so t is 15.
> You could also do:
> r.y.y.y.y.z
> to get the computed field which should return:
> hellohellohello
>
> On Jul 22, 6:50 pm, "mr.freeze" <[email protected]> wrote:
>
> > It shouldn't. It should throw an error at the print statement because
> > 'a' is not defined.
>
> > On Jul 22, 6:33 pm, mdipierro <[email protected]> wrote:
>
> > > The following code uses:
> > > 1) a computed field
> > > 2) a self reference
> > > 3) a virtual field
>
> > > >>> db.define_table('a',Field('x'),Field('y','reference 
> > > >>> a'),Field('z',compute=lambda row: row['x']*3))
> > > >>> class A:
> > > >>>      def t(self): return len(self.a.z)
> > > >>> db.a.virtualfields.append(A())
> > > >>> r=db.a.insert(x='hello')
> > > >>> r.update_record(x=r.x,y=r)
> > > >>> print a.y.y.y.y.t
>
> > > 15
>
> > > Can you explain how it works?

Reply via email to