Flask获取并编辑值

问题描述 投票:1回答:1

我有一个网站,我在表格中显示股票的特定值,然后应该能够在点击按钮时再次更改这些值,这将打开一个内部有一个表格的模态。

现在这是我的第一个烧瓶应用程序,我在使用我从表单中获取的新数据覆盖我的“原始”数据时遇到了问题。我真的不知道如何做到这一点。我的代码看起来像这样:

views.朋友

@app.route("/stock-editor", methods=['GET', 'POST'])
def stock_editor():
        index = Index(initial_date=app.config['INCEPTION_DATE'], initial_value=10000)
        end_date = datetime.today()
        start_date = app.config['INCEPTION_DATE']
        empty_stocks = dict()

        for symbol, shares in index.share_distribution.items(): # Here I get every empty stock and put inside a dict so that I can show it on my page
            stock_value = StockValue.query.filter(StockValue.value_eur == 0.000000, StockValue.identifier == symbol, StockValue.date <= end_date, StockValue.date >= start_date).all()
            if stock_value:
                empty_stocks[symbol] = stock_value

        if request.method == 'POST': # this is where I am failing, more info below
            result = request.form
            new_stock_value = request.values.get('new-stock-value')
            new_source_value = request.values.get('new-source-value')

            return render_template('stock-editor.html', result=result, empty_stocks=empty_stocks, start_date=start_date, end_date=end_date, new_stock_value=new_stock_value, new_source_value=new_source_value)
        else:
            return render_template('stock-editor.html', empty_stocks=empty_stocks, start_date=start_date, end_date=end_date)

html:

<table class="table">
                <tbody>
                    {% for symbol, stock_values in empty_stocks.items() %}
                            <tr class="table-active">
                                <th>Aktie</th>
                                <th>Datum</th>
                                <th>Wert</th>
                                <th colspan="2">Quelle</th>
                            </tr>
                            {% for value in stock_values %}
                                <tr>
                                    <th>{{ symbol }}</th>
                                    <td>{{ value.date.strftime('%d.%m.%Y')}}</td>
                                    <td>{{ '%d' % value.value_eur }}</td>
                                    <td>{{ value.source }}</td>
                                    <td>
                                        <button type="button" class="btn btn-success" data-toggle="modal" data-target="#modal-{{ value.id }}">Bearbeiten <i class="fas fa-pencil-alt"></i></button>

                                        <!-- The Modal -->
                                        <div class="modal fade" id="modal-{{ value.id }}">
                                          <div class="modal-dialog">
                                            <div class="modal-content">

                                              <!-- Modal Header -->
                                              <div class="modal-header">
                                                <h4 class="modal-title">Aktie bearbeiten</h4>
                                                <button type="button" class="close" data-dismiss="modal">&times;</button>
                                              </div>

                                              <!-- Modal body -->
                                              <div class="modal-body">
                                                  <form method="POST">
                                                      <label for="new-stock-value" class="col-form-label">Neuer Wert:</label>
                                                      <input type="number" name="new-stock-value" class="form-control" id="new-stock-value" placeholder="{{ '%d' % value.value_eur }}">
                                                      <label for="new-source-value" class="col-form-label">Quelle:</label>
                                                      <input type="text" name="new-source-value" class="form-control" id="new-source-value" placeholder="{{ value.source }}">

                                                      <!-- Modal footer -->
                                                      <div class="modal-footer">
                                                          <button type="submit" class="btn btn-success">Ändern</button>
                                                          <button type="button" class="btn btn-danger" data-dismiss="modal">Abbrechen</button>
                                                      </div>
                                                  </form>
                                              </div>

                                            </div>
                                          </div>
                                        </div>

                                    </td>
                                </tr>
                            {% endfor %}
                    {% endfor %}
                </tbody>
            </table>

所以在if request.method == 'POST'我得到了我的新值(new_stock_valuenew_source_value),但是我有点迷失在如何实际将它们设置为我设置这些新值的股票的新价值?

python-3.x flask flask-sqlalchemy
1个回答
2
投票

在模态表单中添加如下所示的隐藏字段,

<input type='hidden' name='id' value='{{ value.id }}'>

上面的代码段允许您发送正在编辑的当前股票的ID。在路线上你可以抓住这个id,

id = request.values.get('id')

使用此id,使用stock的新值更新empty_stocks字典。

for symbol, stock_values in empty_stocks:
    for value in stock_values:
        if value.id == id:
            value.value_eur = request.values.get('new-stock-value')
            value.source = request.values.get('new-source-value')
            break

我希望这对你有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.