CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/pypi-flask-admin

Simple and extensible admin interface framework for Flask

86

1.30x

Quality

Pending

Does it follow best practices?

Impact

86%

1.30x

Average score across 10 eval scenarios

Overview
Eval results
Files

forms.mddocs/

Forms and Field Types

Advanced form system with custom field types, validation, widgets, and CSRF protection for Flask-Admin interfaces.

Capabilities

Base Form Classes

Foundation form classes providing translation support and CSRF protection.

class BaseForm:
    def __init__(self, formdata=None, obj=None, prefix='', **kwargs):
        """
        Base form class with translation support.
        
        Args:
            formdata: Input data for form
            obj: Object to populate form from
            prefix (str): Field name prefix
            **kwargs: Additional form arguments
        """

class SecureForm(BaseForm):
    """
    Form with CSRF protection enabled.
    Automatically includes and validates CSRF tokens.
    """

Custom Field Types

Enhanced field types for common admin interface requirements.

class DateTimeField:
    def __init__(
        self,
        label=None,
        validators=None,
        format=None,
        **kwargs
    ):
        """
        Enhanced datetime field with picker widget.
        
        Args:
            label (str, optional): Field label
            validators (list, optional): Field validators
            format (str, optional): Date/time format string
            **kwargs: Additional field arguments
        """

class TimeField:
    def __init__(
        self,
        label=None,
        validators=None,
        formats=None,
        default_format=None,
        widget_format=None,
        **kwargs
    ):
        """
        Time field with multiple format support.
        
        Args:
            label (str, optional): Field label
            validators (list, optional): Field validators
            formats (list, optional): Accepted time formats
            default_format (str, optional): Default format for parsing
            widget_format (str, optional): Format for widget display
            **kwargs: Additional field arguments
        """

class Select2Field:
    def __init__(
        self,
        label=None,
        validators=None,
        coerce=None,
        choices=None,
        allow_blank=False,
        blank_text=None,
        **kwargs
    ):
        """
        Select2 styled select field with enhanced UI.
        
        Args:
            label (str, optional): Field label
            validators (list, optional): Field validators
            coerce (function, optional): Value coercion function
            choices (list, optional): Available choices
            allow_blank (bool): Allow empty selection
            blank_text (str, optional): Text for blank option
            **kwargs: Additional field arguments
        """

class Select2TagsField:
    def __init__(
        self,
        label=None,
        validators=None,
        save_as_list=False,
        coerce=None,
        allow_duplicates=False,
        **kwargs
    ):
        """
        Select2 tags field for multi-value input.
        
        Args:
            label (str, optional): Field label
            validators (list, optional): Field validators
            save_as_list (bool): Save as list instead of string
            coerce (function, optional): Value coercion function
            allow_duplicates (bool): Allow duplicate tags
            **kwargs: Additional field arguments
        """

class JSONField:
    """
    JSON data field with validation and pretty formatting.
    Inherits from TextAreaField with JSON-specific processing.
    """

Form Validators

Custom validators for Flask-Admin form fields.

class FieldListInputRequired:
    """
    Validator for FieldList to ensure at least one item is present.
    """
    
    def __init__(self, message=None):
        """
        Initialize validator.
        
        Args:
            message (str, optional): Custom validation error message
        """
    
    def __call__(self, form, field):
        """
        Validate field has at least one entry.
        
        Args:
            form: Form instance
            field: Field being validated
            
        Raises:
            ValidationError: If field is empty
        """

Form Utilities

Utility classes and functions for form management and configuration.

class FormOpts:
    """
    Form options container for configuration.
    """

def recreate_field(unbound):
    """
    Recreate UnboundField instance.
    
    Args:
        unbound: UnboundField to recreate
        
    Returns:
        UnboundField: New field instance
    """

Usage Examples

Custom Form with Validation

from flask_admin.form import BaseForm, SecureForm
from flask_admin.form.fields import Select2Field, JSONField
from wtforms import StringField, TextAreaField, BooleanField
from wtforms.validators import DataRequired, Email, Length

class UserForm(SecureForm):
    name = StringField('Full Name', validators=[
        DataRequired(),
        Length(min=2, max=100)
    ])
    
    email = StringField('Email Address', validators=[
        DataRequired(),
        Email()
    ])
    
    role = Select2Field('Role', choices=[
        ('admin', 'Administrator'),
        ('user', 'Regular User'),
        ('guest', 'Guest User')
    ], coerce=str)
    
    is_active = BooleanField('Active User')
    
    preferences = JSONField('User Preferences', description='JSON configuration data')
    
    bio = TextAreaField('Biography', description='User biography and notes')

# Use in model view
class UserModelView(ModelView):
    form = UserForm
    form_args = {
        'name': {'render_kw': {'placeholder': 'Enter full name'}},
        'email': {'render_kw': {'placeholder': 'user@example.com'}}
    }

Advanced Field Configuration

from flask_admin.form.fields import DateTimeField, TimeField, Select2TagsField
from datetime import datetime

class EventForm(SecureForm):
    title = StringField('Event Title', validators=[DataRequired()])
    
    start_time = DateTimeField(
        'Start Time',
        format='%Y-%m-%d %H:%M',
        default=datetime.now
    )
    
    duration = TimeField(
        'Duration',
        formats=['%H:%M', '%H:%M:%S'],
        default_format='%H:%M'
    )
    
    tags = Select2TagsField(
        'Tags',
        save_as_list=True,
        coerce=str,
        description='Enter tags separated by commas'
    )
    
    location = Select2Field(
        'Location',
        choices=[],  # Will be populated dynamically
        allow_blank=True,
        blank_text='Select a location...'
    )

class EventModelView(ModelView):
    form = EventForm
    
    def create_form(self, obj=None):
        form = super().create_form(obj)
        # Populate location choices dynamically
        form.location.choices = [
            (loc.id, loc.name) for loc in Location.query.all()
        ]
        return form
    
    def edit_form(self, obj=None):
        form = super().edit_form(obj)
        # Populate location choices dynamically
        form.location.choices = [
            (loc.id, loc.name) for loc in Location.query.all()
        ]
        return form

Form Widget Customization

class ProductModelView(ModelView):
    form_widget_args = {
        'name': {
            'placeholder': 'Product name',
            'class': 'form-control-lg'
        },
        'description': {
            'rows': 5,
            'placeholder': 'Detailed product description...'
        },
        'price': {
            'step': '0.01',
            'min': '0',
            'placeholder': '0.00'
        },
        'category': {
            'data-placeholder': 'Choose category...',
            'class': 'select2-enhanced'
        }
    }
    
    form_args = {
        'price': {
            'validators': [DataRequired(), NumberRange(min=0)]
        },
        'name': {
            'validators': [DataRequired(), Length(max=200)]
        }
    }

Custom Field Override

from wtforms import SelectField, TextAreaField
from flask_admin.form.fields import Select2Field

class ArticleModelView(ModelView):
    form_overrides = {
        'status': Select2Field,  # Use Select2 instead of regular select
        'content': TextAreaField  # Use textarea for content field
    }
    
    form_args = {
        'status': {
            'choices': [
                ('draft', 'Draft'),
                ('published', 'Published'),
                ('archived', 'Archived')
            ],
            'coerce': str
        },
        'content': {
            'render_kw': {
                'rows': 10,
                'class': 'editor'
            }
        }
    }

JSON Field Usage

class ConfigModelView(ModelView):
    form_overrides = {
        'settings': JSONField
    }
    
    form_args = {
        'settings': {
            'description': 'Configuration in JSON format',
            'render_kw': {
                'rows': 8,
                'placeholder': '{\n  "key": "value"\n}'
            }
        }
    }
    
    def on_model_change(self, form, model, is_created):
        # Validate JSON before saving
        try:
            if model.settings:
                import json
                json.loads(model.settings)
        except ValueError as e:
            raise ValidationError(f'Invalid JSON: {e}')

Install with Tessl CLI

npx tessl i tessl/pypi-flask-admin

docs

appengine-integration.md

core-admin.md

file-admin.md

forms.md

geoalchemy-integration.md

helpers-utilities.md

index.md

model-views.md

mongoengine-integration.md

redis-integration.md

sqlalchemy-integration.md

tile.json