How to make a field non-editable in Flask Admin view of a model class

前端 未结 3 702
离开以前
离开以前 2021-02-20 13:03

I have a User model class and password is one attribute among many. I am using Flask web framework and Flask-Admin extension to create the admin view o

3条回答
  •  时光说笑
    2021-02-20 13:29

    Here is a solution that expands upon Remo's answer and this so answer. It allows for different field_args for edit and create forms.

    Custom Field Rule Class

    from flask_admin.form.rules import Field
    
    class CustomizableField(Field):
        def __init__(self, field_name, render_field='lib.render_field', field_args={}):
            super(CustomizableField, self).__init__(field_name, render_field)
            self.extra_field_args = field_args
    
        def __call__(self, form, form_opts=None, field_args={}):
            field_args.update(self.extra_field_args)
            return super(CustomizableField, self).__call__(form, form_opts, field_args)
    

    UserView Class

    class UserView(ModelView):
    
        column_list = ('first_name', 'last_name', 'username', 'email')
        searchable_columns = ('username', 'email')
    
        # this is to exclude the password field from list_view:
        excluded_list_columns = ['password']
        can_create = True
        can_delete = False
    
        # If you want to make them not editable in form view: use this piece:
        form_edit_rules = [
            CustomizableField('name', field_args={
                'readonly': True
            }),
            # ... place other rules here
        ]
    

提交回复
热议问题