keyed tables are only partially supported. Perhaps user Denes can say
more about that. For now here is a quick hack that should work:

db.define_table('cars',
    Field('car_id','integer'),
    Field('model_id',
'integer',requires=IS_IN_DB(db,'car_models.model_id','%
(model_name)s')),
    Field('note','text'),
    primarykey=['car_id'],
    migrate=False
)



On Oct 1, 6:19 am, Ivan Matveev <[email protected]> wrote:
> Hello All,
> I'm trying to make a web2py interface to a legacy db(mysql).
> The db is defined like this:
>
> CREATE TABLE `car_models` (
>   `model_id` int(10) unsigned NOT NULL auto_increment,
>   `model_name` text NOT NULL,
>   PRIMARY KEY  (`model_id`)
> )
>
> CREATE TABLE `cars` (
>   `car_id` int(10) unsigned NOT NULL auto_increment,
>   `model_id` int(10) unsigned NOT NULL,
>   PRIMARY KEY  (`car_id`)
> )
>
> a model:
>
> db.define_table('car_models',
>     Field('model_id','integer'),
>     Field('model_name','string'),
>     primarykey=['model_id'],
>     migrate=False
> )
>
> db.define_table('cars',
>     Field('car_id','integer'),
>     Field('model_id','integer'),
>     Field('note','text'),
>     primarykey=['car_id'],
>     migrate=False
> )
>
> works fine in appadmin. Shows tables, inserts/edits rows.
> But if I'm trying to define a reference
>
> db.define_table('cars',
>     Field('car_id','integer'),
>     Field('model_id', db.car_models.model_id),
>     Field('note','text'),
>     primarykey=['car_id'],
>     migrate=False
> )
>
> I get this error:
>
> Error traceback
>
> Traceback (most recent call last):
>   File "/home/ivm/prg/web2py/gluon/restricted.py", line 186, in
> restricted
>     exec ccode in environment
>   File "/home/ivm/prg/web2py/applications/monicar_db_test/controllers/
> appadmin.py", line 410, in ?
>   File "/home/ivm/prg/web2py/gluon/globals.py", line 96, in <lambda>
>     self._caller = lambda f: f()
>   File "/home/ivm/prg/web2py/applications/monicar_db_test/controllers/
> appadmin.py", line 124, in insert
>     form = SQLFORM(db[table], ignore_rw=ignore_rw)
>   File "/home/ivm/prg/web2py/gluon/sqlhtml.py", line 668, in __init__
>     if field.type == 'id':
>   File "/home/ivm/prg/web2py/gluon/sql.py", line 2551, in __eq__
>     return Query(self, '=', value)
>   File "/home/ivm/prg/web2py/gluon/sql.py", line 2993, in __init__
>     right = sql_represent(right, left.type, left._db._dbname,
> left._db._db_codec)
>   File "/home/ivm/prg/web2py/gluon/sql.py", line 555, in sql_represent
>     return str(int(obj))
> ValueError: invalid literal for int(): id
>
> Looks like DAL wants me to refere to a field of type 'id'
>
> but if I change 'model_id' field type to id
>
> db.define_table('car_models',
>     Field('model_id','id'),
>     Field('model_name','string'),
>     primarykey=['model_id'],
>     migrate=False
> )
>
> appadmin shows 'car_models' but doesn't let me edit  rows
> and shows empty 'cars' table(its not empty )
>
> web2py 1.83.2
> python2.4

Reply via email to