我有两个模型 - Employee
,它有一个外键引用Role
。
views.py:
@admin.route('/employees/assign/<int:id>', methods=['GET', 'POST'])
@login_required
def assign_employee(id):
'''
Assign a role to an employee
'''
check_admin()
employee = Employee.query.get_or_404(id)
# prevent admin from being assigned a role
if employee.is_admin:
abort(403)
form = EmployeeAssignForm(obj=employee)
if form.validate_on_submit():
employee.role = form.role.data
db.session.add(employee)
db.session.commit()
flash('You have successfully assigned a role!')
# redirect to the employees page
return redirect(url_for('admin.list_employees'))
return render_template('admin/employees/employee.html',
employee=employee, form=form,
title='Assign Employee')
forms.py:
class EmployeeAssignForm(FlaskForm):
'''
Form for admin to assign roles to employees
'''
role = QuerySelectField(query_factory=lambda: Role.query.all(), get_label='name',
allow_blank=True, blank_text=(u'Select a role'),
get_pk=lambda x: 'id')
submit = SubmitField('Submit')
现在,使用 get_pk=lambda x: 'id'
,我在 html 表单 Web 视图中获得<option value="id">
,无论我选择哪个选项Role
,第一个选项总是被选中。
如何将Role
的id
设置为表单中的选项值并选择它?
干杯!
请尝试get_pk=lambda x: x.id
。