當我通過 Flask-admin 面板添加一個新集合時,我沒有使用init方法通過另一個函式來縮小影像。當我通過 Python 控制臺添加一個新集合時,一切正常。但是 Flask 管理面板...
模型:
class Collections(db.Model):
__tablename__ = 'collections'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String, nullable=False)
preview_photo = db.Column(db.String, nullable=False)
def __init__(self, name, preview_photo):
self.name = name
self.preview_photo = collections_resize(preview_photo)
def __repr__(self):
return f'{self.name}'
如您所見,在 init 方法中,我傳入了 self.thumb_photo collections_resize() 函式的結果。但是該方法沒有通過面板運行,您能解釋一下原因嗎?
查看型號:
class CollectionsView(ModelView):
form_columns = ['name', 'preview_photo']
admin.add_view(CollectionsView(Collections, db.session))
uj5u.com熱心網友回復:
我最終以這種方式重寫了視圖模型并且它起作用了,但是我不得不為它撰寫一個單獨的 html,它看起來很奇怪,但它確實可以。如果您有更好的想法,請提出建議。
class CollectionsView(ModelView):
form_columns = ['id', 'name', 'preview_photo']
@expose('/new/', methods=('GET', 'POST'))
def create_view(self):
if request.method == 'POST':
if 'file' not in request.files:
return redirect(request.url)
file = request.files['file']
if file.filename == '':
return redirect(request.url)
if file and allowed_file(file.filename):
filename = file.filename
file.save(os.path.join('path', filename))
name = request.form.get('name')
preview_photo = filename
q = Collections(name=name, preview_photo=preview_photo)
db.session.add(q)
db.session.commit()
return redirect('/admin/collections')
return render_template('create_coll.html')
uj5u.com熱心網友回復:
覆寫create_model。
class CollectionsView(ModelView):
form_columns = ['name', 'preview_photo']
def build_new_instance_and_populate_obj(form):
name = form.get('name')
preview_photo = form.get('preview_photo')
return Collections(name=name, preview_photo=preview_photo)
def create_model(self, form):
try:
# model = self.build_new_instance()
# form.populate_obj(model)
model = self.build_new_instance_and_populate_obj(form)
self.session.add(model)
self._on_model_change(form, model, True)
self.session.commit()
except Exception as ex:
if not self.handle_view_exception(ex):
flash(gettext('Failed to create record. %(error)s', error=str(ex)), 'error')
log.exception('Failed to create record.')
self.session.rollback()
return False
else:
self.after_model_change(form, model, True)
return model
參考:flask-admin/flask-admin#1927
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/343843.html
標籤:Python 烧瓶 sqlalchemy 烧瓶管理员
