【发布时间】:2022-01-23 23:22:55
【问题描述】:
我有一个应用程序,它接收用户数据,将其保存到数据库中,然后允许用户编辑该数据。我有一个使用下拉列表填充的变量。当用户去编辑数据时,我希望他们从数据库中的选择显示在下拉列表的顶部。例如,如果他们为公司“CoolCompany”创建了一个新用户(Jane Smith)并且现在正在编辑 Jane Smith,我希望它显示“CoolCompany”作为第一个下拉列表选择。目前它按字母顺序显示列表(“AwesomeCompany”)。我怀疑这是因为我的 AddUserForm 的设置方式。我可以在我看来调整它吗?我们列出了足够多的公司,因此在用户添加数据时需要保持字母顺序。
型号:
from location import db
from location.folders.models import Company
class ProductUsers(db.Model):
__table__ = db.Model.metadata.tables['product_users']
company = db.relationship('Company', foreign_keys='ProductUsers.prod_id')
def __init__(self, first_nm, last_nm, prod_id):
self.first_nm = first_nm
self.last_nm = last_nm
self.prod_id = prod_id
def get_id(self):
return int(self.prod_user_key)
表格:
from location.otherfolders.models import ProductUsers
from location.folders.models import Company
class AddUsersForm(FlaskForm):
company = SelectField(
'Company*',
validators=[DataRequired()],
choices=[(comp.prod_id, comp.comp_display_name) for comp in Company.query.filter(Company.member_status!=500).order_by('comp_display_name').all()])
first_nm = StringField('First Name*', validators=[DataRequired()])
last_nm = StringField('Last Name*', validators=[DataRequired()])
submit = SubmitField('Submit User')
class UpdateProductUserForm(AddUsersForm):
first_nm = StringField('First Name*', validators=[DataRequired()])
last_nm = StringField('Last Name*', validators=[DataRequired()])
disable = SubmitField('Deactivate')
更新用户的视图:
from location.otherfolders.models import ProductUsers
from location.folders.models import Company
from location.otherfolders.forms import AddUsersForm, UpdateProductUserForm
approvals = Blueprint('approvals', __name__)
@approvals.route('/productapproval/addproductUser/<int:prod_user_key>', methods=['GET', 'POST'])
def edit_product_users(prod_user_key):
productUser = ProductUsers.query.get_or_404(prod_user_key)
form = UpdateProductUserForm()
if form.validate_on_submit():
productUser = ProductUsers.query.filter_by(prod_user_key=prod_user_key).first()
productUser.org_id = form.company.data
productUser.first_nm = form.first_nm.data
productUser.last_nm = form.last_nm.data
db.session.commit()
flash('User Account Updated', 'success')
return redirect(url_for('approvals.users', prod_user_key=prod_user_key))
form.company.data = productUser.prod_id
form.first_nm.data = productUser.first_nm
form.last_nm.data = productUser.last_nm
return render_template('/productapproval/addusers.html', form=form)
模板:
{% extends "base.html" %}
{% block form_content %}
<form class="form form-horizontal" method="POST">
{{ form.hidden_tag() }}
<div class="form-group row">
{{ form.company.label(class="col-sm-3 col-form-label font-weight-bold") }}
<div class="col-sm-9">
{{ form.company(class="listStyleComp") }}
</div>
</div>
<div class="form-group row">
{{ form.first_nm.label(class="col-sm-3 col-form-label font-weight-bold") }}
<div class="col-sm-9">
{{ form.first_nm(class="form-control sm-text listStyleComp", placeholder="First Name") }}
</div>
</div>
<div class="form-group row">
{{ form.last_nm.label(class="col-sm-3 col-form-label font-weight-bold") }}
<div class="col-sm-9">
{{ form.last_nm(class="form-control sm-text listStyleComp", placeholder="Last Name") }}
</div>
</div>
<!-- BUTTONS -->
<div class="form-group row">
<div class="col-sm-10">
{{ form.submit(class="btn btn-success") }}
</div>
</div>
</form>
{% endblock %}
【问题讨论】:
标签: python flask jinja2 flask-sqlalchemy flask-wtforms