class UserModelView(ModelView): can_view_details = True can_delete = False column_exclude_list = ('password', ) column_default_sort = 'id' column_filters = ( 'name', 'username', ) create_template = 'user/create.html' edit_template = 'user/edit.html' form_create_rules = [ rules.FieldSet(('username', ), 'Account'), # Header and four fields. Email field will go above phone field. rules.FieldSet(('first_name', 'last_name', 'email', 'phone'), 'Personal'), # Separate header and few fields rules.Header('Location'), rules.Field('city'), # String is resolved to form field, so there's no need to explicitly use `rules.Field` 'country', # Show macro that's included in the templates rules.Container('rule_demo.wrap', rules.Field('notes')) ] form_edit_rules = form_create_rules
def test_rule_container(): app, db, admin = setup() Model1, _ = create_models(db) db.create_all() view = CustomModelView(Model1, db.session, create_template='macro.html', form_create_rules=(rules.Container( 'wrap', rules.Macro('test_lib.another_test')), )) admin.add_view(view) client = app.test_client() rv = client.get('/admin/model1/new/') eq_(rv.status_code, 200) data = rv.data.decode('utf-8') pos1 = data.find('<wrapper>') pos2 = data.find('another_test') pos3 = data.find('</wrapper>') ok_(pos1 != -1) ok_(pos2 != -1) ok_(pos3 != -1) ok_(pos1 < pos2 < pos3)
def test_rule_container(): app, db, admin = setup() Model1, _ = create_models(db) db.create_all() view = CustomModelView( Model1, db.session, create_template="macro.html", form_create_rules=(rules.Container( "wrap", rules.Macro("test_lib.another_test")), ), ) admin.add_view(view) client = app.test_client() rv = client.get("/admin/model1/new/") eq_(rv.status_code, 200) data = rv.data.decode("utf-8") pos1 = data.find("<wrapper>") pos2 = data.find("another_test") pos3 = data.find("</wrapper>") ok_(pos1 != -1) ok_(pos2 != -1) ok_(pos3 != -1) ok_(pos1 < pos2 < pos3)
class UserView(sqla.ModelView): """ This class demonstrates the use of 'rules' for controlling the rendering of forms. """ form_create_rules = [ # Header and four fields. Email field will go above phone field. rules.FieldSet(('name', 'email', 'phone'), u'个人信息'), # Separate header and few fields rules.Header(u'备注'), rules.Field('user_story'), # String is resolved to form field, so there's no need to explicitly use `rules.Field` # 'country', # Show macro from Flask-Admin lib.html (it is included with 'lib' prefix) rules.Container('rule_demo.wrap', rules.Field('notes')) ] # Use same rule set for edit page form_edit_rules = form_create_rules create_template = 'rule_create.html' edit_template = 'rule_edit.html' column_exclude_list = ('password', 'notes') # can_create = False def is_accessible(self): return flask_login.current_user.is_authenticated
class UserView1(sqla.ModelView): def _list_thumbnail(view, context, model, name): if not model.path: return '' return Markup('<img src="%s">' % url_for('static', filename='files/'+form.thumbgen_filename(model.path))) column_formatters = { 'path':_list_thumbnail } # Alternative way to contribute field is to override it completely. # In this case, Flask-Admin won't attempt to merge various parameters for the field. form_extra_fields = { 'path': form.ImageUploadField('Image', base_path=file_path, thumbnail_size=(100, 100, True), url_relative_path='files/') } """ This class demonstrates the use of 'rules' for controlling the rendering of forms. """ form_create_rules = [ # Header and four fields. Email field will go above phone field. rules.FieldSet(('first_name', 'last_name', 'email', 'phone','path'), 'Personal'), # Separate header and few fields rules.Header('Location'), rules.Field('city'), # String is resolved to form field, so there's no need to explicitly use `rules.Field` 'country', # Show macro that's included in the templates rules.Container('rule_demo.wrap', rules.Field('notes')) #rules.FieldSet('path') ] # Use same rule set for edit page form_edit_rules = form_create_rules create_template = 'create_user.html' edit_template = 'edit_user.html'
class UserView(sqla.ModelView): """ This class demonstrates the use of 'rules' for controlling the rendering of forms. """ form_create_rules = [ # Header and four fields. Email field will go above phone field. rules.FieldSet(('first_name', 'last_name', 'email', 'phone'), 'Personal'), # Separate header and few fields rules.Header('Location'), rules.Field('city'), # String is resolved to form field, so there's no need to explicitly use `rules.Field` 'country', # Show macro from Flask-Admin lib.html (it is included with 'lib' prefix) rules.Container('rule_demo.wrap', rules.Field('notes')) ] # Use same rule set for edit page form_edit_rules = form_create_rules create_template = 'rule_create.html' edit_template = 'rule_edit.html'
class UserView(sqla.ModelView): """ Esta clase demuestra el uso de 'reglas' para controlar la representación de formularios. """ form_create_rules = [ # Header y los 4 campos.. rules.FieldSet(('first_name', 'last_name', 'email', 'phone'), 'Personal'), # Separando headr y campos rules.Header('Location'), rules.Field('city'), 'country', # Mostrar macro de Flask-Admin lib.html (se incluye con el prefijo 'lib') rules.Container('rule_demo.wrap', rules.Field('notes')) ] # Use same rule set for edit page form_edit_rules = form_create_rules create_template = 'rule_create.html' edit_template = 'rule_edit.html'
class UserView(sqla.ModelView): """ This class demonstrates the use of 'rules' for controlling the rendering of forms. """ form_create_rules = [ # Header and four fields. Email field will go above phone field. rules.FieldSet(("first_name", "last_name", "email", "phone"), "Personal"), # Separate header and few fields rules.Header("Location"), rules.Field("city"), # String is resolved to form field, so there's no need to explicitly use `rules.Field` "country", # Show macro from Flask-Admin lib.html (it is included with 'lib' prefix) rules.Container("rule_demo.wrap", rules.Field("notes")), ] # Use same rule set for edit page form_edit_rules = form_create_rules create_template = "rule_create.html" edit_template = "rule_edit.html"
class UserView(MyModelView): #id, username, confirmed, email, __password_hash, role_id, location, about_me, member_since, last_seen can_view_details = True # show a modal dialog with records details form_widget_args = {'id': {'readonly': True}} column_list = [ 'id', 'role_id', 'username', 'confirmed', 'email', 'location', 'about_me', 'member_since', 'last_seen' ] column_auto_select_related = True column_searchable_list = [ 'id', 'role_id', 'username', 'confirmed', 'email', 'location', 'about_me', 'member_since', 'last_seen' ] column_editable_list = [ 'username', 'confirmed', 'email', 'location', 'about_me', 'member_since', ] column_default_sort = [('username', False), ('last_seen', False)] # sort on multiple columns # custom filter: each filter in the list is a filter operation (equals, not equals, etc) # filters with the same name will appear as operations under the same filter column_filters = [ 'username', FilterEqual(column=User.username, name='User Name'), #FilterLastNameBrown(column=User.last_name, name='Last Name', # options=(('1', 'Yes'), ('0', 'No'))), 'member_since', 'email', 'confirmed', 'last_seen', 'location', ] # column_formatters = {'phone_number': phone_number_formatter} # setup edit forms so that only posts created by this user can be selected as 'featured' form_create_rules = [ # Header and four fields. Email field will go above phone field. rules.FieldSet(('username', 'email', 'role', 'confirmed', 'member_since', 'last_seen'), 'Personal'), # Separate header and few fields rules.Header('Location'), rules.Field('location'), # String is resolved to form field, so there's no need to explicitly use `rules.Field` # Show macro that's included in the templates rules.Container('rule_demo.wrap', rules.Field('about_me')) ] form_edit_rules = form_create_rules create_template = 'admin/create_user.html' edit_template = 'admin/edit_user.html' def edit_form(self, obj): return self._filtered_roles(super(UserView, self).edit_form(obj)) def _filtered_roles(self, form): form.role.query_factory = lambda: Role.query.filter( Role.permission == form._obj.id).all() return form
class FileView(MyModelView): column_list = ('title', 'file_path', 'file_bytes') column_searchable_list = ('title', 'file_path') column_default_sort = 'file_path' column_labels = {'file_bytes': 'Size'} column_formatters = { 'file_bytes': lambda v, c, m, n: '-' if m.file_bytes is None else Markup( '<nobr>%s</nobr>' % humanize.naturalsize(m.file_bytes)), } class SizeRule(rules.BaseRule): def __call__(self, form, form_opts=None, field_args={}): if form._obj.file_bytes: return humanize.naturalsize(form._obj.file_bytes) return '-' class UrlRule(rules.BaseRule): def __call__(self, form, form_opts=None, field_args={}): url = url_for('docs', path=form.file_path.data) return Markup('<a href="%s" target="_blank">%s</a>' % (url, url)) form_columns = ( 'title', 'description', 'file_path', 'file_mime', 'file_bytes', ) form_widget_args = { 'file_mime': { 'readonly': True }, 'file_path': { 'readonly': True }, 'file_bytes': { 'readonly': True }, } form_edit_rules = [ 'title', 'description', 'file_path', 'file_mime', rules.Container('rules.staticfield', SizeRule(), label='Size'), rules.Container('rules.staticfield', UrlRule(), label='URL'), ] form_create_rules = ['title', 'description', 'upload'] def get_create_form(self): # allow user to upload a file when creating form form = super(FileView, self).get_create_form() form.upload = fields.FileField('Upload a file', [data_required()]) return form def on_model_change(self, form, model, is_create): if is_create: file_data = request.files.get(form.upload.name) model.from_upload(file_data)