Bri*_*ach 12 python flask-admin
我的SQLAlchemy模型有一个String字段,我想限制为几个选择.
我想知道如何在Flask-Admin界面中为此字段创建一个下拉列表,以确保只使用我的一个选项填充数据库.如果我让用户手动输入这些字段,他们可能会错误地拼写它们等.
zx8*_*x81 25
enum,form_choices和form_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_showing和color.第一场承认的价值观0和1,而是使之对眼睛的形式将呈现更容易不显示为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文档的验证器部分.
| 归档时间: |
|
| 查看次数: |
4678 次 |
| 最近记录: |