使用 flask-admin 中的下拉列表限制选择
limit choices with dropdown in flask-admin
我的 SQLAlchemy 模型有一个 String
字段,我想将其限制为几个选择。
我想知道如何在 Flask-Admin 界面中为这个字段创建一个下拉列表,以确保数据库只填充我的选择之一。如果我让用户手动输入这些字段,他们可能会拼写错误等等
enum
、form_choices
和 form_args
您的问题是关于在表单级别限制值,但我们也可以在模式级别简要讨论它。
一个。在数据库级别限制值:enum
字段
要限制允许值的范围,首先要考虑的是您是否希望数据库为您强制执行。大多数数据库都有一个 enum
类型字段,允许您将字段限制为一组值 (MySQL, PostGres)。这种方法有利也有弊。在缺点中,值可能不会按照您期望的顺序列出;每次你想向集合中引入新值时,你都必须修改数据库。
乙。使用下拉列表限制值: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_showing
和 color
。第一个字段接受值 0
和 1
,但为了让眼睛更容易看,表单将显示 Not Showing for 0
和 显示 1
。
请注意,这将适用于常规形式,但不适用于 内联形式。
您需要将 ModelView 添加到应用程序:类似于
admin.add_view(FilmAdmin(yourmodels.Film, db.session))
C。验证:form_args
在内联表单中,您可能没有下拉菜单。但是您可以通过为各个字段定义 WTF 验证器来继续完善您的自定义 ModelView。
正如我们对 form_choices
所做的那样,您可以定义一个包含 validators
列表的 form_args
字典。例如:
# 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 introduction and to the validators section of the WTF documentation。
我的 SQLAlchemy 模型有一个 String
字段,我想将其限制为几个选择。
我想知道如何在 Flask-Admin 界面中为这个字段创建一个下拉列表,以确保数据库只填充我的选择之一。如果我让用户手动输入这些字段,他们可能会拼写错误等等
enum
、form_choices
和 form_args
您的问题是关于在表单级别限制值,但我们也可以在模式级别简要讨论它。
一个。在数据库级别限制值:enum
字段
要限制允许值的范围,首先要考虑的是您是否希望数据库为您强制执行。大多数数据库都有一个 enum
类型字段,允许您将字段限制为一组值 (MySQL, PostGres)。这种方法有利也有弊。在缺点中,值可能不会按照您期望的顺序列出;每次你想向集合中引入新值时,你都必须修改数据库。
乙。使用下拉列表限制值: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_showing
和 color
。第一个字段接受值 0
和 1
,但为了让眼睛更容易看,表单将显示 Not Showing for 0
和 显示 1
。
请注意,这将适用于常规形式,但不适用于 内联形式。
您需要将 ModelView 添加到应用程序:类似于
admin.add_view(FilmAdmin(yourmodels.Film, db.session))
C。验证:form_args
在内联表单中,您可能没有下拉菜单。但是您可以通过为各个字段定义 WTF 验证器来继续完善您的自定义 ModelView。
正如我们对 form_choices
所做的那样,您可以定义一个包含 validators
列表的 form_args
字典。例如:
# 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 introduction and to the validators section of the WTF documentation。