Flask-Admin:如何在ModelView中获取模型对象属性?

时间:2018-07-02 19:25:22

标签: python flask flask-sqlalchemy flask-admin

初始信息:

我在ReportViewer1.Reset(); ReportViewer1.Visible = true; ReportViewer1.EnableTelemetry = false; ReportViewer1.ShowParameterPrompts = true; ReportViewer1.ProcessingMode = ProcessingMode.Local; ReportViewer1.LocalReport.ReportPath = Server.MapPath($"~/Reports/{_reportName}"); foreach (var param in ReportParameters.Where(r => r.Hidden)) ReportViewer1.LocalReport.SetParameters(new ReportParameter(param.Name, param.DefaultValue)); foreach (var dataset in DataSets) ReportViewer1.LocalReport.DataSources.Add(new ReportDataSource(dataset, GetReportData(dataset))); ReportViewer1.LocalReport.Refresh(); 中拥有Page模型:

SQLAlchemy

它具有class Page(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(128), index=True, nullable=False) url = db.Column(db.String(128), default="", nullable=False, unique=True) main_image = db.Column(db.Unicode(128)) 的{​​{1}}(来自PageView的{​​{1}}):

ModelView

我想要的内容:使用页面网址(例如“ about”或“ samsung-galaxy-7”)作为子文件夹名称,将图像保存在每个页面的不同子文件夹中。需要使用它来执行自定义重复操作,因此具有相同名称的文件不会相互覆盖。

主要问题:我无法在Flask-Admin内获取ImageUploadField对象属性以在路径中使用它。我可以在诸如class PageView(ModelView): form_extra_fields = { 'main_image': form.ImageUploadField( 'Main image', base_path=file_path, relative_path='product_images/{}/'.format(models.Page.url), thumbnail_size=(100, 100, True), )} from app import models 之类的Flask-Admin方法中获取它,以便在每次更改模型后都可以手动移动/删除文件,但这确实很不合常规。

问题:那么,有什么方法可以在Page中使用对象属性?像PageView之类的东西是完全可以接受的:)

1 个答案:

答案 0 :(得分:0)

解决了ImageUploadField.namegendocs)。我决定不创建子目录,而是向所有页面图像添加url前缀:

def add_url_to_name(obj, file_data):
    parts = op.splitext(file_data.filename)
    return '{}_{}{}'.format(obj.url, parts[0], parts[1])

form_extra_fields = {
    'main_image': form.ImageUploadField(
        'Main image',
        base_path=file_path,
        relative_path='product_images/',
        thumbnail_size=(100, 100, True),
        namegen=add_url_to_name,
    )
}