我正在尝试覆盖 Flask-Admin edit_form()
,以便动态填充SelectField
. 我设法这样做了
class ProductForm(Form):
order = IntegerField('order')
name = TextField('name')
category = SelectField('category', choices=[])
image = ImageUploadField(label='Optional image',
base_path=app.config['UPLOAD_FOLDER_ABS'],
relative_path=app.config['UPLOAD_FOLDER_R'],
max_size=(200, 200, True),
endpoint='images',
)
class ProductsView(MyModelView):
create_template = 'admin/create-products.html'
edit_template = 'admin/edit-products.html'
column_list = ('order', 'name', 'category', 'image')
form = ProductForm
column_default_sort = 'order'
def edit_form(self, obj):
form = self._edit_form_class(get_form_data(), obj=obj)
cats = list(db.db.categories.find())
cats.sort(key=lambda x: x['order'])
sorted_cats = [(cat['name'], cat['name']) for cat in cats]
form.category.choices = sorted_cats
form.image.data = obj['image']
return form
现在的问题是/edit/
视图中的表单默认值name
和order
字段为空,除非我将这两行添加到edit_form()
:
form.name.data = obj['name']
form.order.data = obj['order']
但如果我这样做,表单将忽略所有更改(因为我已经设置了 form.field_name.data ?)
如何在正确覆盖的同时将旧表单值保留为“占位符” edit_form()
?