Улучшение администратора Flask: преобразование текстовых полей в поля выбора

Flask Admin — мощное расширение для Flask, которое упрощает создание административных интерфейсов. Одним из распространенных требований при создании панелей администратора является преобразование текстовых полей в поля выбора, чтобы предоставить пользователям предопределенные параметры. В этой статье мы рассмотрим несколько методов достижения такого преобразования, используя разговорный язык и примеры кода, которые помогут вам в этом.

Метод 1: использование класса Enum
Один простой подход — использовать класс Python Enum. Вы можете определить перечисление с нужными параметрами, а затем использовать его в качестве типа поля в Flask Admin. Давайте посмотрим пример:

from enum import Enum
class MyOptions(Enum):
    OPTION1 = 'Option 1'
    OPTION2 = 'Option 2'
    OPTION3 = 'Option 3'
class MyModelView(ModelView):
    form_choices = {
        'my_field': MyOptions.choices()
    }
# Register the view
admin.add_view(MyModelView(MyModel, db.session))

Метод 2: реализация типа настраиваемого поля.
Другой подход заключается в создании типа настраиваемого поля, расширяющего поле BaseFormFlask Admin. Это позволяет вам определить собственную логику рендеринга и обработки. Вот пример:

from flask_admin.model.fields import BaseForm
class SelectionField(BaseForm):
    def __init__(self, label=None, validators=None, choices=None, kwargs):
        super(SelectionField, self).__init__(label, validators, kwargs)
        self.choices = choices or []
    def process_formdata(self, valuelist):
        if valuelist:
            self.data = valuelist[0]
        else:
            self.data = None
    def populate_obj(self, obj, name):
        setattr(obj, name, self.data)
class MyModelView(ModelView):
    form_overrides = {
        'my_field': SelectionField
    }
    form_args = {
        'my_field': {
            'choices': [
                ('option1', 'Option 1'),
                ('option2', 'Option 2'),
                ('option3', 'Option 3')
            ]
        }
    }
# Register the view
admin.add_view(MyModelView(MyModel, db.session))

Метод 3: использование Flask-WTF
Если вы уже используете Flask-WTF для обработки форм, вы можете использовать его класс SelectFieldдля достижения преобразования. Вот пример:

from flask_wtf import FlaskForm
from wtforms import SelectField
from flask_admin.form.widgets import Select2Widget
class MyForm(FlaskForm):
    my_field = SelectField('My Field', choices=[
        ('option1', 'Option 1'),
        ('option2', 'Option 2'),
        ('option3', 'Option 3')
    ], widget=Select2Widget())
class MyModelView(ModelView):
    form = MyForm
# Register the view
admin.add_view(MyModelView(MyModel, db.session))

В этой статье мы рассмотрели несколько методов преобразования текстовых полей в поля выбора в Flask Admin. Используя класс Enum, создавая настраиваемые типы полей или используя Flask-WTF, вы можете улучшить взаимодействие с пользователем вашей панели администратора, предоставив предопределенные параметры. Выберите метод, который лучше всего соответствует вашим потребностям, и начните создавать более интуитивно понятные и удобные интерфейсы с помощью Flask Admin.