访问和显示Web2py中多个表的相关记录

时间:2013-12-22 16:01:39

标签: mysql web2py

我定义了3个表:

db.define_table('image',
Field('title', unique=True,length=200),
Field('file', 'upload'),
format = '%(title)s')

db.define_table('author',
Field('name', unique=True,length=100),
Field('type'),
format = '%(name)s')

db.define_table('post',
Field('image_id', 'reference image'),
Field('author_id', 'reference author'),
Field('email'),
Field('body', 'text'))

我似乎能够访问“posts”表,如下所示

dbref=db
qry=''
fields=['body','image_id']
sel=[db.post[field] for field in fields] 
posts=dbref(qry).select(*sel)

但是我需要在“图像”表中获取相关记录,并在网页上显示图像和文本。我该怎么做?

1 个答案:

答案 0 :(得分:0)

如果记录不多,您可以使用递归选择:

{{for post in posts:}}
{{=IMG(_src=URL('default', 'download', args=post.image_id.file))}}
...
{{pass}}

post.image_id.file将导致每个帖子的额外选择,以便检索文件名。如果有很多记录,那么进行连接会更有效:

posts = db((db.post.image_id == db.image.id) & qry).select(*sel)

然后在视图中:

{{=IMG(_src=URL('default', 'download', args=post.image.file))}}

实际上,通常将引用字段命名为与它们引用的表相同(而不是附加“_id”)。例如:

Field('image', 'reference image')

在这种情况下,无论是使用连接还是递归选择,视图中的代码都是post.image.file - 因此您可以更改控制器中使用的方法,而无需更改视图代码。