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

时间:2015-08-19 22:55:01

标签: python flask-admin

我的SQLAlchemy模型有一个String字段,我想限制几个选项。

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

1 个答案:

答案 0 :(得分:23)

enumform_choicesform_args

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

:一种。限制数据库级别的值:enum字段

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

<强> 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)

form_choices中,您已为两个字段创建了下拉列表:now_showingcolor。第一个字段允许值01,但为了方便用户,表单将显示{em> Not Showing 0显示代表1

请注意,这将以常规形式运行,但不能以内联形式运行。

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

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

<强>℃。验证: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'])]
        }
    }

有许多预先定义的验证器,您可以定义自己的验证器:请参阅flask-admin introductionvalidators section of the WTF documentation