2016-10-20 3 views
0

Wenn meine Flask der Ausführung der Anwendung erhalte ich die folgenden Warnungen:Flask-admin UserWarning: Felder aus ruleset fehlt

C:\Python27\lib\site-packages\flask_admin\model\base.py:1324: UserWarning: Fields missing from ruleset: password 
    warnings.warn(text) 
C:\Python27\lib\site-packages\flask_admin\model\base.py:1324: UserWarning: Fields missing from ruleset: new_password 
    warnings.warn(text) 
* Restarting with stat 
C:\Python27\lib\site-packages\flask_admin\model\base.py:1324: UserWarning: Fields missing from ruleset: password 
    warnings.warn(text) 
C:\Python27\lib\site-packages\flask_admin\model\base.py:1324: UserWarning: Fields missing from ruleset: new_password 
    warnings.warn(text) 

ich normalerweise form_excluded_columns verwendet haben unerwünschte Felder aus meiner Form zu entfernen, aber dieses Mal habe ich eine harte Zeit, um diese Fehler loszuwerden.

Hier ist meine Ansicht:

class AdministratorView(sqla.ModelView): 
    page_size = 10 

    column_searchable_list = (
     'username', 
     'description' 
    ) 

    column_list = (
     'username', 
     'apikey', 
     'description', 
     'active' 
    ) 

    column_exclude_list = list = (
     'apikey', 
     'source' 
    ) 

    form_excluded_columns = (
     'source', 
     'photos' 
    ) 

    column_labels = { 
     'apikey': 'API Key' 
    } 

    form_widget_args = { 
      'apikey':{ 
       'readonly':True 
      } 
    } 

    form_create_rules = (
     rules.FieldSet(('username', 'password', 'description'), 'Personal'), 
     rules.FieldSet(('roles', 'apikey', 'active'), 'Permission'), 
    ) 

    form_edit_rules = (
     rules.FieldSet(('username', 'description'), 'Personal'), 
     rules.FieldSet(('roles', 'apikey', 'active'), 'Permission'), 
     rules.Header('Reset password'), 
     rules.Field('new_password') 
    ) 

    def on_model_change(self, form, model, is_created): 
     if is_created is False: 
      if form.new_password.data: 
       model.password = generate_password_hash(form.new_password.data) 

    def scaffold_form(self): 
     form_class = super(AdministratorView, self).scaffold_form() 
     form_class.password = fields.PasswordField('Password', [validators.Required()]) 
     form_class.new_password = fields.PasswordField('New Password') 
     return form_class 

    def is_accessible(self): 
     if login.current_user.is_authenticated: 
      return login.current_user.has_role('admin') 

Der Zweck dieser Ansicht ist ein einziges, benötigte Passwort-Feld hat auf dem Formular erstellen und ein optionalen „Neues Passwort“ -Feld auf der Bearbeitungsform. Ich verstehe, dass die Warnungen auftreten, wenn ich password/new_password nicht in form_create_rules und form_edit_rules einschließe, aber das Hinzufügen dieser Felder zu form_excluded_columns löst es nicht.

Irgendwelche Tipps, wie ich die Warnungen loswerden kann?

bearbeiten:

Ich glaube, ich eher get_create_form und get_edit_form statt nur scaffold_form verwenden sollten. Ein Vorteil ist, dass es dadurch einfacher ist, jedes Formular separat zu überschreiben. Kann ich das weiter vereinfachen? Soll ich eine Anforderungsvalidierung wie diese durchführen oder dem Datenbankschema (SQLAlchemy) Nullable = False hinzufügen?

class AdministratorView(sqla.ModelView): 
    page_size = 10 

    column_searchable_list = (
     'username', 
     'description' 
    ) 

    column_list = (
     'username', 
     'apikey', 
     'description', 
     'active' 
    ) 

    column_exclude_list = list = (
     'apikey', 
     'source' 
    ) 

    form_excluded_columns = (
     'source', 
     'photos' 
    ) 

    column_labels = { 
     'apikey': 'API Key' 
    } 

    form_widget_args = { 
      'apikey':{ 
       'readonly':True 
      } 
    } 

    form_create_rules = (
     rules.FieldSet(('username', 'password', 'description'), 'Personal'), 
     rules.FieldSet(('roles', 'apikey', 'active'), 'Permission'), 
    ) 

    form_edit_rules = (
     rules.FieldSet(('username', 'description'), 'Personal'), 
     rules.FieldSet(('roles', 'apikey', 'active'), 'Permission'), 
     rules.Header('Reset password'), 
     rules.Field('new_password') 
    ) 

    def get_create_form(self): 
     form = self.scaffold_form() 
     form.username = fields.StringField('Username', [validators.Required()]) 
     form.password = fields.PasswordField('Password', [validators.Required()]) 
     return form 

    def get_edit_form(self): 
     form = self.scaffold_form() 
     delattr(form, 'password') 
     form.new_password = fields.PasswordField('New Password') 
     return form 

    def on_model_change(self, form, model, is_created): 
     if is_created is False: 
      if form.new_password.data: 
       model.password = generate_password_hash(form.new_password.data) 

    def is_accessible(self): 
     if login.current_user.is_authenticated: 
      return login.current_user.has_role('admin') 

Antwort