Not sure if it's a bug, but the book does say:
- Keyed tables can only reference other keyed tables.
- Referencing fields must use the reference tablename.fieldname format.
Anthony
On Saturday, March 12, 2016 at 4:52:53 AM UTC-5, Val K wrote:
>
> Hi!
> I have a problem - look at example:
>
> db.define_table('a_tbl', Field('name'))
> db.define_table('b_tbl', Field('id', 'reference a_tbl') ,Field('name'),
> primarykey=['id'])
> db.define_table('c_tbl', Field('b_tbl_id', 'reference b_tbl')
> ,Field('name'))
>
>
> *c_tbl* definition causes an error (see below) because there is
> *b_tbl_id* field that references to *b_tbl* that has *id* reference to
> *a_tbl*
>
> Is this a bug?
>
>
>
>
> ----------------------------------------------------------------------------------------------------------
>
> <type 'exceptions.KeyError'> 'foreign_key'
>
> web2py™Version 2.13.4-stable+timestamp.2015.12.26.04.59.39PythonPython
> 2.7.9:
>
>
> *File D:\web2py_last\web2py\gluon\packages\dal\pydal\adapters\base.py in
> create_table at line 303*
> Function argument list
>
> (self=<pydal.adapters.sqlite.SQLiteAdapter object>, table=<Table c_tbl
> (id,name)>, migrate=True, fake_migrate=False, polymodel=None)
> Code listing
>
> 298.
> 299.
> 300.
> 301.
> 302.
> 303.
>
> 304.
> 305.
> 306.
> 307.
>
>
> # must be PK reference or unique
> if getattr(rtable, '_primarykey', None) and rfieldname in
> rtable._primarykey or \
> rfield.unique:
> ftype = types[rfield.type[:9]] % \
> dict(length=rfield.length)
>
> # multicolumn primary key reference?
> if not rfield.unique and len(rtable._primarykey)>1:
> # then it has to be a table level FK
> if rtablename not in TFK:
>
>
>
>
>
--
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
---
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/d/optout.