首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Flask-Admin:如何在ModelView中获取模型对象属性?

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

Stack Overflow用户
提问于 2018-07-03 03:25:22
回答 1查看 752关注 0票数 0

初始信息:

我在SQLAlchemy中有Page模型

代码语言:javascript
复制
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))

它有PageView (来自Flask-AdminModelView)和ImageUploadField覆盖:

代码语言:javascript
复制
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

关于我想要的:可以将图片保存在每个页面的不同子文件夹中,使用页面url (如‘’或'samsung-galaxy-7')作为子文件夹名称。自定义重复操作需要它,这样同名的文件就不会互相覆盖。

主要问题:我无法在PageView中获取Page对象属性以在路径中使用它。我可以在一些Flask-Admin方法中获得它,比如on_model_change,这样我就可以在每次模型更改后手动移动/删除文件,但它感觉真的很不自然。

there :那么,有什么方法可以在ModelView中使用object属性吗?像__init__ super()之类的Smth是完全可以接受的:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-03 06:37:50

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

代码语言:javascript
复制
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,
    )
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51142571

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档