我的SQLAlchemy模型中有一个字符串字段,我想在Flask-Admin中显示一个带有几个选项的选择框,而不是标准文本字段。
class MyModel(db.Model):
id = db.Column(db.Integer, primary_key=True)
my_field = db.Column(db.String(128)) # Field I would like to be choices
class MyModelView(ModelView):
"""
Admin manager for MyModel
"""
# Which option should I use here?
def __init__(self):
super(MyModelView, self).__init__(MyModel, db.session)
答案 0 :(得分:6)
它最终成为form_overrides
和form_args
的组合。 form_overrides
告诉表单使用选择字段,form_args
允许您传递选项和其他选项。
class MyModel(db.Model):
id = db.Column(db.Integer, primary_key=True)
my_field = db.Column(db.String(128))
class MyModelView(ModelView):
"""
Admin manager for MyModel
"""
form_overrides = dict(
my_field=SelectField
)
form_args = dict(
my_field=dict(
choices=[
('choice_1', 'Choice 1'),
('choice_2', 'Choice 2')
]
)
)
def __init__(self):
super(MyModelView, self).__init__(MyModel, db.session)
答案 1 :(得分:3)
您可以使用' form_choices'来实现此功能。在模型视图中,基于您的问题中嵌入的代码的以下示例说明:
class MyModel(db.Model):
id = db.Column(db.Integer, primary_key=True)
my_field = db.Column(db.String(128)) # Field I would like to be choices
class MyModelView(ModelView):
"""
Admin manager for MyModel
"""
form_choices = {
'my_field': [
('choice_1', 'Choice 1'),
('choice_2', 'Choice 2'),
('choice_3', 'Choice 3'),
('choice_4', 'Choice 4'),
('choice_5', 'Choice 5')
]
}
def __init__(self):
super(MyModelView, self).__init__(MyModel, db.session)
<强>参考:强>
您可以通过指定a来限制文本字段的可能值 选择列表:
form_choices = { &#39;标题&#39;:[ (&#39; MR&#39;,&#39; Mr&#39;), (&#39; MRS&#39;,&#39; Mrs&#39;), (&#39; MS&#39;,&#39; Ms&#39;), (&#39; DR&#39;,&#39; Dr&#39;), (&#39; PROF&#39;,&#39; Prof。&#39;) ]}