[英]How to display a specific value from a database as the first drop-down list selection option
我有一個應用程序,它接收用戶數據,將其保存到數據庫中,然后允許用戶編輯該數據。 我有一個使用下拉列表填充的變量。 當用戶 go 編輯數據時,我希望他們從數據庫中的選擇顯示在下拉列表的頂部。 例如,如果他們為公司“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)
Forms:
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 %}
首先,我認為您缺少UpdateProductUserForm
中的company
字段。
在那里添加:
class UpdateProductUserForm(AddUsersForm):
first_nm = StringField('First Name*', validators=[DataRequired()])
last_nm = StringField('Last Name*', validators=[DataRequired()])
company = SelectField('Company*', validators=[DataRequired()], choices=[])
disable = SubmitField('Deactivate')
請注意,我們將其定義為一個空列表。 然后我們更新它,但是我們想要在視圖中:
@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)
# get all the companies
companies = [comp.prod_id for comp in Company.query.filter(Company.member_status!=500).all()]
# move current company item to start of list
current_company_index = companies.index(productUser.prod_id)
companies.insert(0, companies.pop(current_company_index))
form = UpdateProductUserForm()
form.company.choices = companies
form.first_nm.data = productUser.first_nm
form.last_nm.data = productUser.last_nm
if form.validate_on_submit():
productUser.org_id = form.company.data
productUser.first_nm = form.first_nm.data
productUser.last_nm = form.last_nm.data
db.session.add(productUser)
db.session.commit()
flash('User Account Updated', 'success')
return redirect(url_for('approvals.users', prod_user_key=prod_user_key))
return render_template('/productapproval/addusers.html', form=form)
我注意到您正在獲取用戶兩次。 你不需要這樣做。 此外,您沒有正確地將更新的用戶添加到數據庫 session。 我已經在上面的代碼中修復了這些東西。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.