【发布时间】:2014-07-03 05:14:36
【问题描述】:
我将 flask-admin 与 pymongo(不是 mongoengine)数据库一起使用,但在使用新的 flask-admin ImageUploadField 时遇到了严重问题。
基本上我就是无法让它工作。在过去的两天里,我一直在尝试复制示例,但没有成功,这些示例在 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 方法。
知道我做错了什么吗?
【问题讨论】:
标签: python flask-admin