3

私は 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 メソッドが呼び出されていないようです。

私が何を間違っているのか分かりますか?

4

1 に答える 1