gpt4 book ai didi

python - 每次点击 API 端点时如何加载 WTF 表单类

转载 作者:行者123 更新时间:2023-12-03 17:02:26 25 4
gpt4 key购买 nike

我正在使用 Flask WTF 表单,它依赖于从 API 加载供应商列表。这个供应商列表会改变,但是我发现每次我点击新项目路径时,(我希望重新创建 NewItemForm 类)旧类都是从内存中加载的。供应商 API 路径仅在对象创建时被点击一次

所以我将我的代码更新为这个非功能示例:我尽了最大努力,但我想做的是每次点击新库存项目路径时点击供应商 API 端点,当我创建 NewItemForm() 时以便每次加载表单时供应商列表都会更改。我尝试通过创建一个方法来做到这一点。

解决这个问题的pythonic方法是什么?

api.py :

@inventory.route('/inventory/new', methods=['GET', 'POST'])
def new_item():
form = NewItemForm()
form.update_vendors()

form.py :
from flask.ext.wtf import Form
from wtforms import StringField, SubmitField, SelectField, DecimalField, DateField
from wtforms.validators import Required, Length, NumberRange, Optional
from wtforms.widgets import TextArea
import requests, json, os

class NewItemForm(Form):
def __init__(self):
self.sorted_by_vendors=[('','')]

def update_vendors(self):
api_uri = os.environ.get('API_URL') or 'http://127.0.0.1/whiteboard_v2/v2/'
second_url = api_uri + "api/vendors"
second_request = requests.get(second_url)
other_keys = second_request.json().keys()
vendorOptions=[('','')]
othersortedList = []
for key in other_keys:
vendor_tuple = (key, second_request.json()[key]['vendor_name'])
vendorOptions.append(vendor_tuple)
self.sorted_by_vendors = sorted(vendorOptions, key=lambda tup: (tup[1], tup[0]))

vendor_code = SelectField('Vendor', choices = self.sorted_by_vendors, validators = [Required()])
submit = SubmitField('Create Item')

每次点击 new_item 端点时,如何加载供应商列表,以便供应商下拉列表发生变化?

最佳答案

问题是您将字段绑定(bind)到
vendor_code = SelectField('Vendor', choices = self.sorted_by_vendors, ...
它绑定(bind)了字段的 choices在类级别属性到对该列表的引用,然后稍后替换 sorted_by_vendors引用一个新列表,而 .choices属性仍然指向旧的引用副本。

最简单的解决方法是在 update_vendors() 中进行此更改:
self.vendor_code.choices = sorted(vendorOptions, key=lambda tup: (tup[1], tup[0]))
您也可以将其移出 for 循环,最后只需要执行一次。

关于python - 每次点击 API 端点时如何加载 WTF 表单类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33817926/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com