私は pymongo (mongoengine ではない) データベースでフラスコ管理を使用していますが、新しいフラスコ管理の ImageUploadField を使用する際に深刻な問題が発生しています。
基本的に私はそれを機能させることができません。過去 2 日間、SQLA で問題なく動作する例を再現しようとして失敗しました。これは私の管理者クラスの定義です:
from jinja2 import Markup
from flask_admin.contrib.pymongo import ModelView, filters
from flask_admin import form
from flask_admin.model import fields
from flask_admin.form.upload import ImageUploadField
from flask_admin.form import rules, widgets
import flask_wtf as wtf
from wtforms import validators as wtfv
from wtforms import widgets as wtfw
from wtforms import fields as wtff
class PhotoForm(wtf.Form):
label = wtff.TextField('Label')
file = ImageUploadField('Image', base_path=file_path, thumbnail_size=(100, 100, True))
def __init__(self, *args, **kwargs):
kwargs['csrf_enabled'] = True
super(PhotoForm, self).__init__(*args, **kwargs)
class EquipmentForm(wtf.Form):
photo = fields.InlineFieldList(fields.InlineFormField(PhotoForm))
class EquipmentViewRoot(ModelView):
def _list_thumbnail(view, context, model, name):
if not model['photo']:
return ''
return Markup('<img src="%s">' % url_for('static', filename=form.thumbgen_filename(model.path)))
can_create = True
column_list = ('photo')
column_formatters = {
'photo': _list_thumbnail
}
form = EquipmentForm
フォームは正しく表示されますが、保存ボタンをクリックするとすぐに、画像ファイルが選択されている場合、バイナリ オブジェクトが含まれているため pymongo がモデルを保存できなかったというエラー メッセージが表示されます。
ドキュメント (およびソース コード) によると、ImageUploadField は画像をアップロード ディレクトリに保存し、モデル内のバイナリ オブジェクトをファイル名に置き換える必要があります。これは sqla では発生しますが、pymongo では発生しません。ImageUploadField クラスの populate_obj メソッドが呼び出されていないようです。
私が何を間違っているのか分かりますか?