2

Flask アプリケーションでアップロードされたファイルを管理するために、SQLAlchemy でカスタム フィールドを作成しようとしています。私は基本的に、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. 理想的には、この型のデフォルト値を blank にしたいのですが、FileFieldそれがどのようになるかは正確にはわかりません。問題は、を使用するクラスのコンストラクターで何かをしなくても、属性のデフォルト値を作成する方法がわからないことですFileField

profile_photoでは、属性のデフォルト値を作成する方法はありますか?

4

0 に答える 0