如何在Flask-Admin中将字符串模型字段转换为选择输入?

时间:2015-06-26 20:21:39

标签: python flask flask-sqlalchemy flask-admin

我的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)

2 个答案:

答案 0 :(得分:6)

它最终成为form_overridesform_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)

<强>参考:

Flask-Admin documentation

  

您可以通过指定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;)       ]}