簡體   English   中英

Flask 應用程序中的下拉框使用 WTForms 未更新

[英]Dropdown box in Flask App using WTForms not updating

我有一個帶有客戶頁面和項目頁面的 flask web 應用程序。 這是工作流程,也是出錯的地方。 有什么想法我可能出錯了嗎?

  1. 查看客戶頁面
  2. 點擊“添加客戶”> 轉到“add_customer”路線
  3. 添加客戶信息並點擊提交
  4. 客戶頁面已正確更新為最新的客戶名稱
  5. 查看項目頁面
  6. 單擊“添加項目”> 轉到“add_project”路線
  7. 此頁面有一個客戶列表下拉框,但不包括我創建的最后一個客戶或自上次啟動 flask 以來我創建的任何客戶。

如果我重新啟動 flask,下拉框包含最新的客戶。 起初我以為我沒有提交數據庫,但似乎我與下面的 db.session.commit 在一起。 我發布了相關代碼,如果您想查看其他內容,請告訴我。

我似乎在 web 上找不到我的特殊問題,我發現的大部分內容都與填寫下拉框本身有關,這確實有效。

forms.py:

class AddProjectForm(FlaskForm):
    projectname = StringField('Project Name', validators=[DataRequired()])
    customer_query = Customer.query.all()
    customers = []
    for c in customer_query:
        customers.append(c.customername)
    customers = SelectField('Customer', choices=customers, default=1)
    submit = SubmitField('Add Project')

路線.py:

@app.route('/add_customer', methods=['GET', 'POST'])
@login_required
def add_customer():
    customer = Customer.query.all()
    form = AddCustomerForm()
    if request.method == 'POST':
        customername = request.values.get('customername') 
        c = Customer(customername=customername)
        db.session.add(c)
        db.session.commit()
        return redirect(url_for('customer'))
    return render_template("add_customer.html", title='Add a Customer', form=form)

@app.route('/add_project', methods=['GET', 'POST'])
@login_required
def add_project():
    form = AddProjectForm()
    if request.method == 'POST':
        projectname = request.values.get('projectname') 
        customer = request.values.get('customers') 
        customer_id = Customer.query.filter_by(customername=customer).first().id
        project = Project(projectname=projectname,customer_id=customer_id)
        db.session.add(project)
        db.session.commit()
        return redirect(url_for('projects'))
    return render_template("add_project.html", title='Add a Project', form=form)

add_project.html

{% extends "base.html" %}

{% block content %}
    <h1>Add a Project</h1>
    <form action="" method="post">
        {{ form.hidden_tag() }}
        <p>
            {{ form.projectname.label }}<br>
            {{ form.projectname }}<br>
        </p>
        <p>
            {{ form.customers.label }}<br>
            {{ form.customers }}<br>
        </p>
        <p>
            {{ form.submit() }}
        </p>
    </form>
{% endblock %}

在這里找到了答案:

Flask WTF 表單未使用 sqlite3 數據庫更新

我從表單中刪除了客戶列表人口並將其添加到視圖中。 然后將客戶列表傳遞給模板,並像這樣更新模板。

add_project.html

        <select name="customer" id="customer">
        {% for customer in customers %}
            <option value="{{ customer }}">{{ customer }}</option>
        {% endfor %}
        </select>

現在它正在工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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