Flask获取并编辑值

时间:2018-03-06 09:03:21

标签: python-3.x flask flask-sqlalchemy

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

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

views.py

@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),但我现在有点迷失,实际上将它们设置为股票的新价值我在哪里设置这些新值?

1 个答案:

答案 0 :(得分:2)

将类似下面的隐藏字段添加到模式窗体

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

上面的代码段允许您发送正在编辑的当前股票的ID。在路线中,您可以通过

获取此ID
id = request.values.get('id')

使用此ID,使用新的库存值更新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

我希望这对你有所帮助。