使用flask-admin中的下拉菜单限制选项

Bri*_*ach 12 python flask-admin

我的SQLAlchemy模型有一个String字段,我想限制为几个选择.

我想知道如何在Flask-Admin界面中为此字段创建一个下拉列表,以确保只使用我的一个选项填充数据库.如果我让用户手动输入这些字段,他们可能会错误地拼写它们等.

zx8*_*x81 25

enum,form_choicesform_args

您的问题是关于在表单级别限制值,但我们也可以在架构级别简要讨论它.

A.限制数据库级别的值:enum字段

要限制允许值的范围,首先要考虑的是您是否希望数据库为您强制执行该操作.大多数数据库都有一个enum类型字段,允许您将字段限制为一组值(MySQL,PostGres).这种方法有利有弊.在缺点中,值可能不按您期望的顺序列出; 每次要向集合中引入新值时,都必须修改数据库.

B.通过下拉菜单限制值: form_choices

要创建显示一组允许值的下拉列表,请创建自定义的ModelView并定义您的值范围form_choices.例如:

class FilmAdmin(sqla.ModelView):

    form_choices = { 'now_showing': [ ('0', 'Not Showing'), ('1', 'Showing')],
                     'color': [('bw', 'Black & White'), ('color', 'Color')]
                   }

    # (many other customizations can go here)
Run Code Online (Sandbox Code Playgroud)

form_choices,您已经为两个字段创建了下拉列表:now_showingcolor.第一场承认的价值观01,而是使之对眼睛的形式将呈现更容易不显示0显示1.

请注意,这将以常规形式工作,但不能以内联形式工作.

您需要将ModelView添加到应用程序中:类似于

admin.add_view(FilmAdmin(yourmodels.Film, db.session))

C.验证: form_args

在内联表单中,您可能没有下拉列表.但您可以通过为各个字段定义WTF验证器来不断完善自定义ModelView.

正如我们所做的那样form_choices,您可以定义form_args包含validators列表的字典.例如:

# first import the `AnyOf` validator: 
from wtforms.validators import AnyOf

class FilmAdmin(sqla.ModelView):

    # column_exclude_list = ...
    # form_excluded_columns = ...
    # form_choices = ...

    form_args = {
        'flavors': {
            'validators': [AnyOf(['strawberry', 'chocolate'])]
        }
    }
Run Code Online (Sandbox Code Playgroud)

有许多预定义的验证器,您可以自己定义:请参阅flask-admin介绍WTF文档验证器部分.