表结构如 -
db.define_table('parent',
Field('name'),format='%(name)s')
db.define_table('children',
Field('name'),
Field('mother','reference parent'),
Field('father','reference parent'))
db.children.mother.requires = IS_IN_DB(db, db.parent.id,'%(name)s')
db.children.father.requires = IS_IN_DB(db, db.parent.id,'%(name)s')
控制器:
grid = SQLFORM.grid(db.children, orderby=[db.children.id],
csv=True,
fields=[db.children.id, db.children.name, db.children.mother, db.children.father])
return dict(grid=grid)
此处网格显示正确的值,即父表中母亲和父亲的姓名。 但是当我尝试通过csv链接导出它时 - 得到的excelsheet显示了id而不是母亲和父亲的名字。
请帮忙!
答案 0 :(得分:2)
CSV下载只是为您提供原始数据库值,而无需先应用每个字段的represent
属性。如果您想要每个字段的“代表”值,您有两个选择。首先,您可以选择TSV(制表符分隔值)下载而不是CSV。其次,您可以定义自定义导出类:
import cStringIO
class CSVExporter(object):
file_ext = "csv"
content_type = "text/csv"
def __init__(self, rows):
self.rows = rows
def export(self):
if self.rows:
s = cStringIO.StringIO()
self.rows.export_to_csv_file(s, represent=True)
return s.getvalue()
else:
return ''
grid = SQLFORM.grid(db.mytable, exportclasses=dict(csv=(CSVExporter, 'CSV')))
exportclasses
参数是自定义下载类型的字典,可用于覆盖现有类型或添加新类型。每个项目都是一个元组,包括导出器类和用于UI中下载链接的标签。
我们应该将此作为选项添加。