Nik, declare your validators before you clone your model.
I've encountered this issue before and the problem was because I wasn't*
*declaring
validators of the "master" table *BEFORE* I define the new gholas (i.e.
"clones") table. When I re-located the offending .requires immediately
after the master table, inheritance worked as expected.
Massimo, maybe it's worth a mention in the new book version, considering
that its coding convention: "define models first, validators later". It
might save a few hours worth of head scratching and a lifetime of hair
loss. :D
Here's a proposed entry:
Table inheritance may not behave as expected if attributes or validators
are left undefined before passing them to the *define_table*. If the cloned
fields are expected to behave like the original, ensure attributes are
declared prior to using them for defining subsequent models.
...
####doesn't work: as expected
>>>db.define_table('t_master', Field('f1'), Field('f2'))
>>>db.define_table('t_ghola', db.t_master, Field('owner', db.auth_user))
>>>db.t_master.f1.requires=IS_NOT_EMPTY() # defined before clone creation;
validator not inherited
>>>db.t_master.f1.requires == db.t_ghola.f1.requires
*False*
#### inheritance works
>>>db.define_table('t_master', Field('f1'), Field('f2'))
>>>db.t_master.f1.requires=IS_NOT_EMPTY() #validator defined before clone
table creation
>>>db.define_table('t_ghola', db.t_master, Field('owner', db.auth_user))
>>>db.t_master.f1.requires == db.t_ghola.f1.requires
*True*
*
*
P.S. Found a typo in the book, Self-Reference and Aliases section, in case
it hasn't been corrected yet. *Subtle*, misspelled as "subtile": "The
difference is *subtile*, and there is ..."
Best,