【问题标题】:How to edit multiple values from database in python flask form如何以python烧瓶形式编辑数据库中的多个值
【发布时间】:2021-02-25 12:40:21
【问题描述】:

前段时间我开始学习python编程,我决定尝试使用flask和mysql制作小型合同管理工具。我经历了第一部分来管理客户、卖家和合同,但现在我开始研究更多的数字内容。我可以轻松地处理数据库中的单个记录(其中 1 条记录是例如客户详细信息),但现在我需要找到一种方法来编辑多行中的 1 个值(列)。

我有一个数据库,其中 delivery_period_start 和 delivery_period_end 仅代表月份(它可能会更改为单个 2021-01-00 语句,因为我只需要每月值)。我需要处理的专栏是每个月不同的能源消耗(profile_mw)。我需要有一个表单(使用 wtforms),可用于编辑一个客户所有月份的所有值(每个客户数据将存储在单独的表中)。

过去三天我一直在寻找解决方案,但由于卡住了,我决定向您寻求帮助。

我尝试在flask中执行的代码是:

@app.route(site)
def profile_list():
tablename = "customer"

cur = mysql.connection.cursor()
profile = cur.execute("SELECT * FROM " + tablename)    
profile_list = cur.fetchall()

form = ProfileForm(request.form)
for d in profile_list:       
        form.profile.data = d['profile_mw']

return render_template('site.html', profile_list=profile_list, form=form)

然后我创建了简单的 jinja2 代码尝试填充数据(我跳过了一些以前的代码,例如 formhelpers 或 div 表):

{% for profile in profile_list %}
    <tr>
        <td>{{profile.delivery_period_start}} - {{profile.delivery_period_end}}</td>
         <td>{{ render_field(form.profile, class_="form-control") }}</td>
    </tr>
{% endfor %}

我得到的结果是一个具有正确行数和字符串字段数的表(db 中的 12 条记录 = 12 行 = 12 个字段),正确的起始交货日期,但我在所有字段中得到的值只是最后一个值表(表中最后一行的第 12 个 profile_mw 值)。

能否请您帮助我在表单中获取正确的值(以便我可以分别获得 1-12 个月的正确 profile_mw 值),然后我如何将编辑后的值发送到数据库?

提前感谢您的支持。

【问题讨论】:

  • ´...但是我在所有字段中得到的值只是表中的最后一个值..´ 你得到了 12 倍相同的值并不让我感到惊讶,你正在打印相同的变量(form.profile)。表格里有什么?
  • 您好@MennoHölscher,感谢您对此进行调查。表格很简单:class ProfileForm(Form): profile = StringField('') 我应该简单地创建一个大表格(年数 * 12 个字段)吗?如果是的话(我可以很容易地解决这个问题)我如何使用这个大表单来一次编辑所有值?对于单行编辑,我使用“id”索引寻址。如何对多行执行此操作?

标签: python mysql flask


【解决方案1】:

您要查找的是 WTForms FieldList。转到 the fields documentation 并搜索 FieldList。

FieldList 使您可以在一个表单中创建多个具有相同定义的字段。您需要在创建表单时提供不同的值,当用户提交表单时,您将获得输入的值。

提交表单后,您需要知道这些值的用途,在您的情况下是客户和月份。最简单的方法是将客户 ID 和第一个月作为隐藏字段放在表单中。您将取回它,以便您可以检索您(可能)需要更改的信息。你需要那个,因为在 post 上你不知道你之前发送到页面的信息。

这使得表单显示为:

>>> class ProfileForm(wf.Form):
...     client_id = wf.HiddenField()
...     first_month = wf.HiddenField()
...     month_figures = wf.FieldList(wf.IntegerField(), max_entries=12)

【讨论】:

    猜你喜欢
    • 2020-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-23
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多