【问题标题】:How override Flask-Admin's edit_form() maintaining previous values as placeholders如何覆盖 Flask-Admin 的 edit_form() 将以前的值保留为占位符
【发布时间】:2015-03-06 18:48:34
【问题描述】:

我正在尝试覆盖 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/ 视图中的表单默认nameorder 字段为空,除非我将这两行添加到edit_form()

form.name.data = obj['name']
form.order.data = obj['order']

但如果我这样做,表单将忽略所有更改(因为我已经设置了 form.field_name.data?)

如何在正确覆盖 edit_form() 的同时将旧表单值保留为“占位符”?

【问题讨论】:

    标签: python-2.7 flask flask-admin


    【解决方案1】:

    我遇到了类似的问题,感谢here的回答我解决了;

    基本上你为字段设置默认值,然后调用各个字段的 process() 方法,传入当前设置的值。

    from wtforms.utils import unset_value
    
    form.name.default = obj['name']
    form.name.process(None, form.name.data or unset_value)
    form.order.default = obj['order']
    form.order.process(None, form.order.data or unset_value)
    

    【讨论】:

      猜你喜欢
      • 2011-05-21
      • 1970-01-01
      • 2020-05-09
      • 1970-01-01
      • 2011-08-02
      • 2022-08-16
      • 1970-01-01
      • 1970-01-01
      • 2019-03-11
      相关资源
      最近更新 更多