我一般来说对Python&Flask还是相当陌生,但是我遇到了一个复选框无法解决的问题。数据库字段是一个整数(SQLite)。创建记录时,它可以使用1或0。但是,当我尝试使用WTForms编辑记录时,无法获得反映数据库中内容的复选框-1或0(选中或未选中)。下面有问题的字段是manager,dept_head和admin。不确定我缺少什么?任何建议将不胜感激。
型号
class User(UserMixin, db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
firstname = db.Column(db.String(128), nullable=False)
lastname = db.Column(db.String(128), nullable=False)
email = db.Column(db.String(128), nullable=False)
password_hash = db.Column(db.String(128), nullable=True)
locationid = db.Column(db.Integer, db.ForeignKey('locations.id'), nullable=True)
location = db.relationship('Location', backref='users')
departmentid = db.Column(db.Integer, db.ForeignKey('departments.id'), nullable=True)
department = db.relationship('Department', backref='users')
job_title = db.Column(db.String(128), nullable=True)
mobile_phone = db.Column(db.String(16), nullable=False)
manager = db.Column(db.Integer, nullable=False, default=0)
dept_head = db.Column(db.Integer, nullable=False, default=0)
admin = db.Column(db.Integer, nullable=False, default=0)
date_created = db.Column(db.DateTime, default=db.func.current_timestamp())
date_updated = db.Column(db.DateTime, default=db.func.current_timestamp(), onupdate=db.func.current_timestamp())
date_deleted = db.Column(db.DateTime)
表格
class UserForm(FlaskForm):
id = HiddenField('ID')
firstname = StringField('First Name', validators=[DataRequired()])
lastname = StringField('Last Name', validators=[DataRequired()])
email = StringField('Email', validators=[DataRequired(), Email()])
locationid = SelectField('Location')
departmentid = SelectField('Department')
job_title = StringField('Job Title')
mobile_phone = StringField('Mobile Phone', validators=[DataRequired()])
manager = BooleanField('Manager', default=False, false_values=(False, 'false', 0, '0'))
dept_head = BooleanField('Dept Head', default=False, false_values=(False, 'false', 0, '0'))
admin = BooleanField('Admin', default=False, false_values=(False, 'false', 0, '0'))
submit = SubmitField('Create')
def __init__(self, *args, **kwargs):
super(UserForm, self).__init__()
self.locationid.choices = [(l.id, l.name) for l in Location.query.all()]
self.departmentid.choices = [(d.id, d.name) for d in Department.query.all()]
控制器
@mod_user.route('/edit/<int:id>', methods=['GET', 'POST'])
@login_required
def edit(id):
u = User.query.filter_by(id=id).first_or_404()
form = UserForm()
form.process(formdata=request.form, obj=u)
return render_template('user/edit.html', form=form, u = u)
Edit.html
<form method="POST" action="{{ url_for('user.update', id=u.id) }}" accept-charset="UTF-8" role="form" id="UserForm">
{{ form.csrf_token }}
{{ form.id }}
<p><label>First Name: </label>{{ form.firstname(class_='form-control') }}</p>
<p><label>Last Name: </label>{{ form.lastname(class_='form-control') }}</p>
<p><label>Email: </label>{{ form.email(class_='form-control') }}</p>
<p><label>Location: </label>{{ form.locationid(class_='form-control') }}</p>
<p><label>Dept: </label>{{ form.departmentid(class_='form-control') }}</p>
<p><label>Job Title: </label>{{ form.job_title(class_='form-control') }}</p>
<p><label>Mobile Phone: </label>{{ form.mobile_phone(class='form-control', placeholder='(555) 555-1212') }}</p>
<p><label>Manager: </label>{{ form.manager(class_='fancy-checkbox', value=1) }}</p>
<p><label>Dept Head: </label>{{ form.dept_head(class_='fancy-checkbox', value=1) }}</p>
<p><label>Admin: </label>{{ form.admin(class_='fancy-checkbox', value=1) }}</p>
{{ form.submit(class_='btn btn-primary btn-lg') }}
</form>
数据 Database
正在使用的表单(管理员用户示例,应选中所有复选框) Web Form