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.