我定义了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)
但是我需要在“图像”表中获取相关记录,并在网页上显示图像和文本。我该怎么做?
答案 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
- 因此您可以更改控制器中使用的方法,而无需更改视图代码。