tahrir.admin module

class tahrir.admin.AssertionView(model: type[Any], session: scoped_session | Session | None, name: str | None = None, category: str | None = None, endpoint: str | None = None, url: str | None = None, static_folder: str | None = None, menu_class_name: str | None = None, menu_icon_type: str | None = None, menu_icon_value: str | None = None)[source]

Bases: BadgeToPersonView

action_view() Response | Response

Mass-model action view.

ajax_lookup() Response | Response
ajax_update() None | tuple[str, int] | str

Edits a single column of a record in list view. Usually used with column_editable_list that integrates with the x-editable library.

// you can use jQuery to make ajax calls like this:

$.ajax({
    url: '/admin/<your_model_view_endpoint>/ajax/update/',
    type: 'POST',
    data: {
        "list_form_pk" : "<primary_key_value>",
        "<column_name>": "<new_value>"
    },
    success: function(response) {
        // handle success
    },
    error: function(response) {
        // handle error
    }
});
create_view() Response | Response | str

Create model view

delete_view() Response | Response

Delete model view. Only POST method is allowed.

details_view() Response | Response | str

Details model view

edit_view() Response | Response | str

Edit model view

export(export_type: str) Response | Response
form_columns = ['badge_id', 'person_id', 'issued_on', 'issued_for']

Collection of the model field names for the form. If set to None will get them from the model.

Example:

class MyModelView(BaseModelView):
    form_columns = ('name', 'email')

(Added in 1.4.0) SQLAlchemy model attributes can be used instead of strings:

class MyModelView(BaseModelView):
    form_columns = ('name', User.last_name)

SQLA Note: Model attributes must be on the same model as your ModelView or you will need to use inline_models.

form_excluded_columns = ['recipient']

Collection of excluded form field names.

For example:

class MyModelView(BaseModelView):
    form_excluded_columns = ('last_name', 'email')
index_view() str

List view

class tahrir.admin.BadgeToPersonView(model: type[Any], session: scoped_session | Session | None, name: str | None = None, category: str | None = None, endpoint: str | None = None, url: str | None = None, static_folder: str | None = None, menu_class_name: str | None = None, menu_icon_type: str | None = None, menu_icon_value: str | None = None)[source]

Bases: TahrirModelView

action_view() Response | Response

Mass-model action view.

ajax_lookup() Response | Response
ajax_update() None | tuple[str, int] | str

Edits a single column of a record in list view. Usually used with column_editable_list that integrates with the x-editable library.

// you can use jQuery to make ajax calls like this:

$.ajax({
    url: '/admin/<your_model_view_endpoint>/ajax/update/',
    type: 'POST',
    data: {
        "list_form_pk" : "<primary_key_value>",
        "<column_name>": "<new_value>"
    },
    success: function(response) {
        // handle success
    },
    error: function(response) {
        // handle error
    }
});
column_searchable_list = ['badge_id', 'badge.name', 'person.nickname', 'person.email']

Collection of the searchable columns.

Example:

class MyModelView(ModelView):
    column_searchable_list = ('name', 'email')

You can also pass columns:

class MyModelView(ModelView):
    column_searchable_list = (User.name, User.email)

The following search rules apply:

  • If you enter ZZZ in the UI search field, it will generate ILIKE '%ZZZ%' statement against searchable columns.

  • If you enter multiple words, each word will be searched separately, but only rows that contain all words will be displayed. For example, searching for abc def will find all rows that contain abc and def in one or more columns.

  • If you prefix your search term with ^, it will find all rows that start with ^. So, if you entered ^ZZZ then ILIKE 'ZZZ%' will be used.

  • If you prefix your search term with =, it will perform an exact match. For example, if you entered =ZZZ, the statement ILIKE 'ZZZ' will be used.

create_view() Response | Response | str

Create model view

delete_view() Response | Response

Delete model view. Only POST method is allowed.

details_view() Response | Response | str

Details model view

edit_view() Response | Response | str

Edit model view

export(export_type: str) Response | Response
index_view() str

List view

class tahrir.admin.BadgeView(model: type[Any], session: scoped_session | Session | None, name: str | None = None, category: str | None = None, endpoint: str | None = None, url: str | None = None, static_folder: str | None = None, menu_class_name: str | None = None, menu_icon_type: str | None = None, menu_icon_value: str | None = None)[source]

Bases: TahrirModelView

action_view() Response | Response

Mass-model action view.

ajax_lookup() Response | Response
ajax_update() None | tuple[str, int] | str

Edits a single column of a record in list view. Usually used with column_editable_list that integrates with the x-editable library.

// you can use jQuery to make ajax calls like this:

$.ajax({
    url: '/admin/<your_model_view_endpoint>/ajax/update/',
    type: 'POST',
    data: {
        "list_form_pk" : "<primary_key_value>",
        "<column_name>": "<new_value>"
    },
    success: function(response) {
        // handle success
    },
    error: function(response) {
        // handle error
    }
});
column_display_pk = True

Controls if the primary key should be displayed in the list view.

column_editable_list = ['name', 'description', 'tags']

Collection of the columns which can be edited from the list view.

For example:

class MyModelView(BaseModelView):
    column_editable_list = ('name', 'last_name')
column_filters = ['tags']

Collection of the column filters.

Can contain either field names or instances of flask_admin.contrib.sqla.filters.BaseSQLAFilter classes.

Filters will be grouped by name when displayed in the drop-down.

For example:

class MyModelView(BaseModelView):
    column_filters = ('user', 'email')

or:

from flask_admin.contrib.sqla.filters import BooleanEqualFilter

class MyModelView(BaseModelView):
    column_filters = (BooleanEqualFilter(column=User.name, name='Name'),)

or:

from flask_admin.contrib.sqla.filters import BaseSQLAFilter

class FilterLastNameBrown(BaseSQLAFilter):
    def apply(self, query, value, alias=None):
        if value == '1':
            return query.filter(self.column == "Brown")
        else:
            return query.filter(self.column != "Brown")

    def operation(self):
        return 'is Brown'

class MyModelView(BaseModelView):
    column_filters = [
        FilterLastNameBrown(
            User.last_name, 'Last Name', options=(('1', 'Yes'), ('0', 'No'))
        )
    ]
column_searchable_list = ['id', 'name', 'description']

Collection of the searchable columns.

Example:

class MyModelView(ModelView):
    column_searchable_list = ('name', 'email')

You can also pass columns:

class MyModelView(ModelView):
    column_searchable_list = (User.name, User.email)

The following search rules apply:

  • If you enter ZZZ in the UI search field, it will generate ILIKE '%ZZZ%' statement against searchable columns.

  • If you enter multiple words, each word will be searched separately, but only rows that contain all words will be displayed. For example, searching for abc def will find all rows that contain abc and def in one or more columns.

  • If you prefix your search term with ^, it will find all rows that start with ^. So, if you entered ^ZZZ then ILIKE 'ZZZ%' will be used.

  • If you prefix your search term with =, it will perform an exact match. For example, if you entered =ZZZ, the statement ILIKE 'ZZZ' will be used.

create_view() Response | Response | str

Create model view

delete_view() Response | Response

Delete model view. Only POST method is allowed.

details_view() Response | Response | str

Details model view

edit_view() Response | Response | str

Edit model view

export(export_type: str) Response | Response
form_columns = ['id', 'name', 'description', 'image', 'stl', 'criteria', 'tags', 'issuer_id']

Collection of the model field names for the form. If set to None will get them from the model.

Example:

class MyModelView(BaseModelView):
    form_columns = ('name', 'email')

(Added in 1.4.0) SQLAlchemy model attributes can be used instead of strings:

class MyModelView(BaseModelView):
    form_columns = ('name', User.last_name)

SQLA Note: Model attributes must be on the same model as your ModelView or you will need to use inline_models.

index_view() str

List view

class tahrir.admin.LazyModelView(model: type[Any], session: scoped_session | Session | None, name: str | None = None, category: str | None = None, endpoint: str | None = None, url: str | None = None, static_folder: str | None = None, menu_class_name: str | None = None, menu_icon_type: str | None = None, menu_icon_value: str | None = None)[source]

Bases: ModelView

Like ModelView, but lazily evaluates the DB session to have access to flask.g

action_view() Response | Response

Mass-model action view.

ajax_lookup() Response | Response
ajax_update() None | tuple[str, int] | str

Edits a single column of a record in list view. Usually used with column_editable_list that integrates with the x-editable library.

// you can use jQuery to make ajax calls like this:

$.ajax({
    url: '/admin/<your_model_view_endpoint>/ajax/update/',
    type: 'POST',
    data: {
        "list_form_pk" : "<primary_key_value>",
        "<column_name>": "<new_value>"
    },
    success: function(response) {
        // handle success
    },
    error: function(response) {
        // handle error
    }
});
create_view() Response | Response | str

Create model view

delete_view() Response | Response

Delete model view. Only POST method is allowed.

details_view() Response | Response | str

Details model view

edit_view() Response | Response | str

Edit model view

export(export_type: str) Response | Response
index_view() str

List view

property session
class tahrir.admin.PersonView(model: type[Any], session: scoped_session | Session | None, name: str | None = None, category: str | None = None, endpoint: str | None = None, url: str | None = None, static_folder: str | None = None, menu_class_name: str | None = None, menu_icon_type: str | None = None, menu_icon_value: str | None = None)[source]

Bases: TahrirModelView

action_view() Response | Response

Mass-model action view.

ajax_lookup() Response | Response
ajax_update() None | tuple[str, int] | str

Edits a single column of a record in list view. Usually used with column_editable_list that integrates with the x-editable library.

// you can use jQuery to make ajax calls like this:

$.ajax({
    url: '/admin/<your_model_view_endpoint>/ajax/update/',
    type: 'POST',
    data: {
        "list_form_pk" : "<primary_key_value>",
        "<column_name>": "<new_value>"
    },
    success: function(response) {
        // handle success
    },
    error: function(response) {
        // handle error
    }
});
column_searchable_list = ['nickname', 'email', '_avatar']

Collection of the searchable columns.

Example:

class MyModelView(ModelView):
    column_searchable_list = ('name', 'email')

You can also pass columns:

class MyModelView(ModelView):
    column_searchable_list = (User.name, User.email)

The following search rules apply:

  • If you enter ZZZ in the UI search field, it will generate ILIKE '%ZZZ%' statement against searchable columns.

  • If you enter multiple words, each word will be searched separately, but only rows that contain all words will be displayed. For example, searching for abc def will find all rows that contain abc and def in one or more columns.

  • If you prefix your search term with ^, it will find all rows that start with ^. So, if you entered ^ZZZ then ILIKE 'ZZZ%' will be used.

  • If you prefix your search term with =, it will perform an exact match. For example, if you entered =ZZZ, the statement ILIKE 'ZZZ' will be used.

create_view() Response | Response | str

Create model view

delete_view() Response | Response

Delete model view. Only POST method is allowed.

details_view() Response | Response | str

Details model view

edit_view() Response | Response | str

Edit model view

export(export_type: str) Response | Response
form_columns = ['nickname', 'email', '_avatar', 'website', 'bio', 'created_on', 'last_login', 'opt_out', 'assertions', 'authorizations', 'invitations']

Collection of the model field names for the form. If set to None will get them from the model.

Example:

class MyModelView(BaseModelView):
    form_columns = ('name', 'email')

(Added in 1.4.0) SQLAlchemy model attributes can be used instead of strings:

class MyModelView(BaseModelView):
    form_columns = ('name', User.last_name)

SQLA Note: Model attributes must be on the same model as your ModelView or you will need to use inline_models.

form_excluded_columns = ['rank']

Collection of excluded form field names.

For example:

class MyModelView(BaseModelView):
    form_excluded_columns = ('last_name', 'email')
index_view() str

List view

inline_models = [<class 'tahrir_api.model.Authorization'>, <class 'tahrir_api.model.Invitation'>, (<class 'tahrir_api.model.Assertion'>, {'form_columns': ('id', 'badge_id', 'issued_on', 'issued_for')})]

Inline related-model editing for models with parent-child relations.

Accepts enumerable with one of the following possible values:

  1. Child model class:

    class MyModelView(ModelView):
        inline_models = (Post,)
    
  2. Child model class and additional options:

    class MyModelView(ModelView):
        inline_models = [(Post, dict(form_columns=['title']))]
    
  3. Django-like InlineFormAdmin class instance:

    from flask_admin.model.form import InlineFormAdmin
    
    class MyInlineModelForm(InlineFormAdmin):
        form_columns = ('title', 'date')
    
    class MyModelView(ModelView):
        inline_models = (MyInlineModelForm(MyInlineModel),)
    

You can customize the generated field name by:

  1. Using the form_name property as a key to the options dictionary:

    class MyModelView(ModelView):
        inline_models = ((Post, dict(form_label='Hello')))
    
  2. Using forward relation name and column_labels property:

    class Model1(Base):
        pass
    
    class Model2(Base):
        # ...
        model1 = relation(Model1, backref='models')
    
    class MyModel1View(Base):
        inline_models = (Model2,)
        column_labels = {'models': 'Hello'}
    

By default used ManyToMany relationship for inline models. You may configure inline model for OneToOne relationship. To achieve this, you need to install special inline_converter for your model:

from flask_admin.contrib.sqla.form import                 InlineOneToOneModelConverter

class MyInlineModelForm(InlineFormAdmin):
    form_columns = ('title', 'date')
    inline_converter = InlineOneToOneModelConverter

class MyModelView(ModelView):
    inline_models = (MyInlineModelForm(MyInlineModel),)
class tahrir.admin.TahrirModelView(model: type[Any], session: scoped_session | Session | None, name: str | None = None, category: str | None = None, endpoint: str | None = None, url: str | None = None, static_folder: str | None = None, menu_class_name: str | None = None, menu_icon_type: str | None = None, menu_icon_value: str | None = None)[source]

Bases: ModelView

action_view() Response | Response

Mass-model action view.

ajax_lookup() Response | Response
ajax_update() None | tuple[str, int] | str

Edits a single column of a record in list view. Usually used with column_editable_list that integrates with the x-editable library.

// you can use jQuery to make ajax calls like this:

$.ajax({
    url: '/admin/<your_model_view_endpoint>/ajax/update/',
    type: 'POST',
    data: {
        "list_form_pk" : "<primary_key_value>",
        "<column_name>": "<new_value>"
    },
    success: function(response) {
        // handle success
    },
    error: function(response) {
        // handle error
    }
});
create_view() Response | Response | str

Create model view

delete_view() Response | Response

Delete model view. Only POST method is allowed.

details_view() Response | Response | str

Details model view

edit_view() Response | Response | str

Edit model view

export(export_type: str) Response | Response
index_view() str

List view

is_accessible()[source]

Override this method to add permission checks.

Flask-Admin does not make any assumptions about the authentication system used in your application, so it is up to you to implement it.

By default, it will allow access for everyone.

page_size = 50

Default page size for pagination.