SQLAlchemy 自定义字段,具有 Flask 中文件上传的默认值

2024-01-19

我正在尝试在 SQLAlchemy 中创建一个自定义字段,用于管理 Flask 应用程序中上传的文件。我基本上试图实现类似于 Django 的 FileField 的功能。

所以我想要做的是,给定一个模型:

class TestModel(Base):
    __tablename__ = "testmodel"
    id = Column(Integer(), primary_key=True)
    profile_photo = Column(FileField(upload_set, 100))

我希望能够做类似的事情:

m = TestModel()
m.profile_photo.save(request.files["profile_photo"])
models.db.session.add(m)
models.db.session.commit()

我所拥有的基于内置的 String 类型,工作原理如下:

class FileField(types.TypeDecorator):
    impl = String

    def __init__(self, upload_set, *args, **kwargs):
        super(FileField, self).__init__(*args, **kwargs)
        self.upload_set = upload_set

    def process_bind_param(self, value, dialect):
        if value is not None:
            return value.filename
        return value

    def process_result_value(self, value, dialect):
        return FileNameString(self.upload_set, value)


class FileNameString(object):

    def __init__(self, upload_set, filename):
        self.upload_set = upload_set
        self.filename = filename

    def save(self, req_file):
        self.filename = self.upload_set.save(req_file)
        return self.filename

    @property
    def url(self):
        return self.upload_set.url(self.filename)

当模型存在于数据库中时,这有效,但当模型是从头开始创建时,则无效profile_photo属性是None。理想情况下,我希望这种类型的默认值为空白FileField,尽管我还没有弄清楚那到底是什么样子。问题是我无法弄清楚如何为属性创建默认值,而不必在任何使用该属性的类的构造函数中执行某些操作FileField.

因此,知道如何为profile_photo属性?


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQLAlchemy 自定义字段,具有 Flask 中文件上传的默认值 的相关文章

随机推荐