簡體   English   中英

如何將數據庫中的特定值顯示為第一個下拉列表選擇選項

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM