2014-11-20 2 views
1

Я работаю над редактирующей пользовательской страницей для своего флеш-приложения, и я не могу понять, как отображать текущие роли пользователя, как и другие переменные, такие как электронная почта ,Заполнение WTForm MultiCheckboxField с ключевыми ролями флеш

Вот мои модели, форма и вид:

#Flask-Principal Role Model 
class Role(db.Model, RoleMixin): 
    id = db.Column(db.Integer(), primary_key=True) 
    name = db.Column(db.String(80), unique=True) 
    description = db.Column(db.String(255)) 

    def __repr__(self): 
     return '<Role %r>' % (self.name) 

#SQLALchemy User Model 
class User(db.Model, UserMixin): 
    id = db.Column(db.Integer, primary_key = True) 
    email = db.Column(db.String(255), unique=True) 
    password = db.Column(db.String(255)) 
    first_name = db.Column(db.String(128)) 
    last_name = db.Column(db.String(128)) 
    business_name = db.Column(db.String(128)) 
    active = db.Column(db.Boolean()) 
    roles = db.relationship('Role', secondary=roles_users, 
          backref=db.backref('users', lazy='dynamic')) 

#WTForms User Form 
class UserForm(Form): 
    first_name = StringField('first name', validators= [Required()]) 
    last_name = StringField('last name', validators= [Required()]) 
    business_name = StringField('business name', validators= [Required()]) 
    email = StringField('email', validators = [Required(), Email()]) 
    active = BooleanField('active') 
    roles = MultiCheckboxField('roles', coerce=int) 

#Edit User View 
@app.route('/admin/users/<id>/edit/', methods = ['GET', 'POST']) 
@roles_required('admin') 
def edit_user(id): 
    user = User.query.filter_by(id = id).first() 
    editform = UserForm() 

# This is how I've assigned choices for other MultiCheckboxField forms, but I haven't 
# needed to populate the MultiCheckboxField from a user model before with role objects. 

    editform.roles.choices = [(x.id,x.name) for x in Role.query.all()] 

    if editform.validate_on_submit(): 
     pass 

    editform.first_name.data = user.first_name 
    editform.last_name.data = user.last_name 
    editform.business_name.data = user.business_name 
    editform.email.data = user.email 
    editform.active.data = user.active 

#The below doesn't show all the available roles, just the current roles assigned. 

    editform.roles.data = user.roles 


    return render_template("user_edit.html", 
     title = "Edit User", 
     user = user, 
     editform = editform) 

Итак, кто-нибудь знает, как иметь WTForms отображения всех ролей доступны, и проверили те, которые в настоящее время находятся в списке user.roles ?

ответ

1

data для множественного выбора поля является списком form_data после того, как он был принужден по вашим coerce отозваны - так что вы обеспечить потребности соответствовать тому, что доступно в качестве первой записи в каждом наборе вы предоставляете choices - в этом случае , целое число. Тем не менее, если вы измените свой код:

editform.roles.data = [role.id for role in user.roles] 

вы должны увидеть все соответствующие флажки проверяются.

+0

Это было идеально. Как только я отформатировал данные, поскольку вы предложили, чтобы все это сработало и работало так, как я предполагал. Большое спасибо Шон! – Chockomonkey

 Смежные вопросы

  • Нет связанных вопросов^_^