On Jun 15, 1:56 pm, zsouthboy <[email protected]> wrote:
> Hi Yarko,
>
> Thanks for the help!
> I had initially tried doing what the introductory docs show (which is
> marking a reference like ("image", db.image) for a column), which
> fails because there is no member 'image' of db yet.
> Then I consulted the technical docs and saw that instead "reference
> image" should be used instead, so tried that, thinking that it would
> be used as a placeholder (and filled in correctly later).
> When that failed, I posted here.
>
> The DAL doesn't recurse to allow this situation? Does anyone know
> why / why not? When I get a chance I'll look at gluon and see how
> trivial it would be to do, even in a hacky way.
... consider dropping this from your vocabulary: ".... even in a hacky
way...";
>
> I do have a separate issue now: following what you've suggested, I now
> get complaints from gluon that referenced tables have duplicate field
> names as the table being defined - did I miss something obvious? That
> seems like there should be no issue doing so. (you can get this error
Yes, it seems so: in gluon/(dal|sql).py, in
Table._create_references(), there's:
if self._tablename in referee.fields:
with no comments - so beyond the shallow, immediate reading for that
line, we have no clue
as to the motivation / reasoning for this particular constraint
(reverse engineering every little thing
just to try to get what intended... besides being no better than
guessing, mind-reading,
also gets tedious). If you simply rename db.person.image to
something w/o the 'image' (tablename),
e.g. db.person.image_id --- this goes away.
As to forward references:
I commented out the lines in Table._create_references() (and the
exception it raises), and __get__ errors come, so there is at least
that simple get/set work to do to get forward references; not sure if
there would be anything else. Commented code _sure would be nice_!
- Yarko
> by simply copying and pasting the suggested fix you responded to me
> with into a test db.py, even). Duplicate field names, but they're in
> separate tables, so why the error?
>
> Traceback (most recent call last):
> File "gluon/restricted.py", line 178, in restricted
> exec ccode in environment
> File "/var/www/web2py/applications/golb/models/db.py", line 93, in
> <module>
> Field('published', 'boolean'))
> File "gluon/sql.py", line 1304, in define_table
> t._create_references()
> File "gluon/sql.py", line 1579, in _create_references
> raise SyntaxError, 'Field: table %s has same name as a field in
> referenced table %s' % (self._tablename, referee._tablename)
> SyntaxError: Field: table image has same name as a field in referenced
> table person