如何在 flask-admin 中导出具有关系的列
how to export column with relationship in flask-admin
我在将与其他表有关系的表导出到 csv 时遇到问题,而在 'simple' 中工作正常。我必须添加一些出口基础?
例如,这是 db.Model:
class Categoria(db.Model):
__tablename__ = 'categorie'
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
categoria = db.Column(db.String(30), primary_key=True)
tipo_id = db.Column(db.Integer, db.ForeignKey('tipi.id'), primary_key=True)
tipo = db.relationship('Tipo', backref='categorie')
这是 ModelView
class CategorieAdmin(sqla.ModelView):
column_display_pk = True
can_export = True
export_types = ['xls']
list_columns = ['categoria', 'tipo']
生成的错误是:Exception: Unexpected data type <class '__main__.Tipo'>
感谢帮助
这个问题很老了,但我遇到了同样的问题,我用 column_formatters_export 解决了它。
column_formatters_export 是一个可以分配给字典的属性,其中键是模型列的名称,它们的值被分配给一个添加功能以更改格式或您需要的功能。
例如您的代码:
class CategorieAdmin(sqla.ModelView):
column_display_pk = True
can_export = True
export_types = ['xls']
list_columns = ['categoria', 'tipo']
column_formatters_export = dict(
categoria=lambda v, c, m, p: '' if m.tipo is None else m.tipo.categoria
)
在 m 中您有模型,您可以获取模型的任何列。其他可能的解决方案是将 representation 方法添加到您的模型中。
例如:
class Categoria(db.Model):
__tablename__ = 'categorie'
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
categoria = db.Column(db.String(30), primary_key=True)
tipo_id = db.Column(db.Integer, db.ForeignKey('tipi.id'), primary_key=True)
tipo = db.relationship('Tipo', backref='categorie')
def __repr__(self):
return '%s' % self.categoria
class CategorieAdmin(sqla.ModelView):
column_display_pk = True
can_export = True
export_types = ['xls']
list_columns = ['categoria', 'tipo']
column_formatters_export = dict(
categoria=lambda v, c, m, p: '' if m.tipo is None else str(m.tipo)
)
我在将与其他表有关系的表导出到 csv 时遇到问题,而在 'simple' 中工作正常。我必须添加一些出口基础? 例如,这是 db.Model:
class Categoria(db.Model):
__tablename__ = 'categorie'
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
categoria = db.Column(db.String(30), primary_key=True)
tipo_id = db.Column(db.Integer, db.ForeignKey('tipi.id'), primary_key=True)
tipo = db.relationship('Tipo', backref='categorie')
这是 ModelView
class CategorieAdmin(sqla.ModelView):
column_display_pk = True
can_export = True
export_types = ['xls']
list_columns = ['categoria', 'tipo']
生成的错误是:Exception: Unexpected data type <class '__main__.Tipo'>
感谢帮助
这个问题很老了,但我遇到了同样的问题,我用 column_formatters_export 解决了它。
column_formatters_export 是一个可以分配给字典的属性,其中键是模型列的名称,它们的值被分配给一个添加功能以更改格式或您需要的功能。
例如您的代码:
class CategorieAdmin(sqla.ModelView):
column_display_pk = True
can_export = True
export_types = ['xls']
list_columns = ['categoria', 'tipo']
column_formatters_export = dict(
categoria=lambda v, c, m, p: '' if m.tipo is None else m.tipo.categoria
)
在 m 中您有模型,您可以获取模型的任何列。其他可能的解决方案是将 representation 方法添加到您的模型中。
例如:
class Categoria(db.Model):
__tablename__ = 'categorie'
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
categoria = db.Column(db.String(30), primary_key=True)
tipo_id = db.Column(db.Integer, db.ForeignKey('tipi.id'), primary_key=True)
tipo = db.relationship('Tipo', backref='categorie')
def __repr__(self):
return '%s' % self.categoria
class CategorieAdmin(sqla.ModelView):
column_display_pk = True
can_export = True
export_types = ['xls']
list_columns = ['categoria', 'tipo']
column_formatters_export = dict(
categoria=lambda v, c, m, p: '' if m.tipo is None else str(m.tipo)
)