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
ZZZin the UI search field, it will generateILIKE '%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 defwill find all rows that containabcanddefin one or more columns.If you prefix your search term with
^, it will find all rows that start with^. So, if you entered^ZZZthenILIKE 'ZZZ%'will be used.If you prefix your search term with
=, it will perform an exact match. For example, if you entered=ZZZ, the statementILIKE '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.BaseSQLAFilterclasses.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
ZZZin the UI search field, it will generateILIKE '%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 defwill find all rows that containabcanddefin one or more columns.If you prefix your search term with
^, it will find all rows that start with^. So, if you entered^ZZZthenILIKE 'ZZZ%'will be used.If you prefix your search term with
=, it will perform an exact match. For example, if you entered=ZZZ, the statementILIKE '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:
ModelViewLike 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
ZZZin the UI search field, it will generateILIKE '%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 defwill find all rows that containabcanddefin one or more columns.If you prefix your search term with
^, it will find all rows that start with^. So, if you entered^ZZZthenILIKE 'ZZZ%'will be used.If you prefix your search term with
=, it will perform an exact match. For example, if you entered=ZZZ, the statementILIKE '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:
Child model class:
class MyModelView(ModelView): inline_models = (Post,)
Child model class and additional options:
class MyModelView(ModelView): inline_models = [(Post, dict(form_columns=['title']))]
Django-like
InlineFormAdminclass 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:
Using the form_name property as a key to the options dictionary:
class MyModelView(ModelView): inline_models = ((Post, dict(form_label='Hello')))
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_converterfor 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.