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
では、属性のデフォルト値を作成する方法はありますか?