2

次のようなテーブル構造-

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 が表示されます。

助けてください!

4

1 に答える 1

2

representCSV ダウンロードでは、最初に各フィールドの属性を適用することなく、未加工のデータベース値が提供されます。各フィールドの「表現された」値が必要な場合は、2 つのオプションがあります。まず、CSV の代わりに TSV (タブ区切り値) ダウンロードを選択できます。次に、カスタム エクスポート クラスを定義できます。

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 でダウンロード リンクに使用されるエクスポーター クラスとラベルを含むタプルです。

おそらくこれをオプションとして追加する必要があります。

于 2013-06-27T11:47:56.037 に答える