On Jun 14, 8:51 am, zsouthboy <zsouth...@gmail.com> wrote:
> Problem: I don't see how to specify multiple tables with table
> references to each other. I can't simply define the relationship,
> because the DAL hasn't created a table yet to reference. But I can't
> create the table(s) because they reference tables that also don't
> exist yet. Catch 22. Besides manually creating the tables (which I
> believe prevents me from using the wonderful DAL), what do I do?

FIRST:
Field( 'foo',  'reference  myself' )   only works for self
references;  if you want to forward reference tables, use a Field type
of integer.
I _thought_ at one point forward references were supported by
Field( ..... 'reference  tablename'), but it clearly is not now
(Massimo could speak to the reasons, if any).

SECOND:
If you change the order of your table definitions, you are left with
only one forward reference.
I'm not sure you need all the cross references, but if you are
convinced you do, try something like:


db.define_table('person',
  Field('username', 'string'),
  Field('password', 'password'),
  Field('description', 'text'),
  Field('email', 'string'),
  Field('creation_date', 'datetime'),
  Field('last_login', 'datetime'),
  Field('image', 'integer'),   #  a forward reference to db.image
)

db.define_table('post',
  Field('title', 'string'),
  Field('data', 'text'),
  Field('date', 'datetime'),
  Field('owner', db.person),
  Field('views', 'integer'),
  Field('published', 'boolean'))

db.define_table('image',
  Field('image', 'upload'),
  Field('date', 'datetime'),
  Field('title', 'string'),
  Field('description', 'string'),
  Field('postid', db.post),
  Field('owner', db.person),
  Field('views', 'integer'),
  Field('published', 'boolean'))

db.define_table('file',
  Field('file', 'upload'),
  Field('date', 'datetime'),
  Field('owner', db.person),
  Field('views', 'integer'),
  Field('published', 'boolean'))

db.define_table('comment',
  Field('name', 'string'),
  Field('person', db.person),
  Field('date', 'datetime'),
  Field('data', 'text'),
  Field('postid', db.post),
  Field('fileid', db.file),
  Field('imageid', db.image),
  Field('published', 'boolean'))




>
> Example:
> db.define_table('image',
>    Field('image', 'upload'),
>    Field('date', 'datetime'),
>    Field('title', 'string'),
>    Field('description', 'string'),
>    Field('postid', 'reference post'),
>    Field('owner', 'reference person'),
>    Field('views', 'integer'),
>    Field('published', 'boolean'))
>
> db.define_table('post',
>    Field('title', 'string'),
>    Field('data', 'text'),
>    Field('date', 'datetime'),
>    Field('owner', 'reference person'),
>    Field('views', 'integer'),
>    Field('published', 'boolean'))
>
> db.define_table('file',
>    Field('file', 'upload'),
>    Field('date', 'datetime'),
>    Field('owner', 'reference person'),
>    Field('views', 'integer'),
>    Field('published', 'boolean'))
>
> db.define_table('comment',
>    Field('name', 'string'),
>    Field('person', 'reference person'),
>    Field('date', 'datetime'),
>    Field('data', 'text'),
>    Field('postid', 'reference post'),
>    Field('fileid', 'reference file'),
>    Field('imageid', 'reference image'),
>    Field('published', 'boolean'))
>
> db.define_table('person',
>    Field('username', 'string'),
>    Field('password', 'password'),
>    Field('description', 'text'),
>    Field('email', 'string'),
>    Field('creation_date', 'datetime'),
>    Field('last_login', 'datetime'),
>    Field('image', 'reference image'))
>
> This fails because the first table defined references tables are are
> defined afterwards. (which in turn reference other tables that aren't
> defined yet)

Reply via email to