Я довольно новичок в 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>
Данные База данных
Форма в действии (пример администратора, все должны быть проверены) Веб-форма