web2py:Grid csv导出显示引用字段的ID而不是值
表格结构如—web2py:Grid csv导出显示引用字段的ID而不是值,csv,grid,web2py,Csv,Grid,Web2py,表格结构如— 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,
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,而不是母亲和父亲的姓名
请帮忙 CSV下载只提供原始数据库值,无需首先应用每个字段的
表示属性。如果需要每个字段的“表示”值,有两个选项。首先,您可以选择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中下载链接的标签
我们可能应该将此作为一个选项添加