[英]Populate a WTForms selectfield with data coming from firestore
So... I'm trying to dynamically fill option from a selectfield
using data coming from a firestore
database.所以...我正在尝试使用来自firestore
数据库的数据从选择selectfield
动态填充选项。 I initialise a new object from my Items class, I load my form named AjouterForm()
, then I call my function getItemsDB()
that populate the var fields
(it's a list) using data from firestore db, and finally I try to populate the selectfield itemFields
.我从我的 Items 类初始化一个新对象,我加载名为AjouterForm()
表单,然后我调用我的函数getItemsDB()
) 使用来自 firestore db 的数据填充 var fields
(它是一个列表),最后我尝试填充选择字段itemFields
。
I can launch the program but when I go on "ajouter" I get an error :我可以启动该程序,但是当我继续“ajouter”时出现错误:
ValueError: too many values to unpack (expected 2) ValueError:解包的值太多(预期为 2)
routes.py路线.py
@app.route("/ajouter", methods=['GET', 'POST'])
def ajouter():
try:
items = Items()
form = AjouterForm()
items.getItemsDB()
form.itemsFields.choices = items.fields
except ValueError:
flash("Problème", 'danger')
return render_template('ajouter.html', title='Ajouter', form=form)
ajouter.html ajouter.html
<div class="content-section">
<form method="POST" action="">
{{ form.hidden_tag() }}
<fieldset class="form-group">
<legend class="border-bottom mb-4">Ajouter</legend>
<div class="row">
<div class="col">
<div class="form-group">
{{ form.type.label }}
{{ form.type }}
</div>
</div>
<div class="col">
<div class="form-group">
{{ form.customer.label }}
{{ form.customer }}
</div>
</div>
</div>
<div class="output">
<div id="INVOICE" class="hidden INVOICE">
<!--A compléter-->
</div>
<div id="ORDER" class="hidden ORDER">
{{ form.block.label }}
{{ form.block }}
</div>
<div id="SERVICE_REQUEST" class="hidden SERVICE_REQUEST">
<!--A compléter-->
</div>
<div class="output2">
<div id="ITEMS" class="hidden2 ITEMS">
{{ form.itemsFields.label }}
{{ form.itemsFields }}
</div>
<div id="PARTNERS">
</div>
<div id="fields">
</div>
</div>
</div>
</fieldset>
</form>
</div>
forms.py表格.py
class AjouterForm(FlaskForm):
type = SelectField("Type", choices=[("INVOICE","invoice"), ("ORDER","order"), ("SERVICE_REQUEST", "service_request")], id="type")
block = SelectField("Block", choices=[("ITEMS","items"), ("PARTNERS","partners"), ("fields","fields")], id="block")
itemsFields = SelectField("Champs", choices=[], coerce=list, id="itemsField")
tailleDocX = IntegerField("Taille X", validators=[DataRequired()])
tailleDocY = IntegerField("Taille Y", validators=[DataRequired()])
customer = SelectField("Customer", choices=[("mlt", "mlt")])
submit = SubmitField('Confirmer')
models.py模型.py
class Items(object):
def __init__(self):
self.fields = []
def getItemsDB(self):
doc_ref = db.collection("customizing").document("FORMS")
doc = doc_ref.get()
datas = doc.get("ORDER").get("ITEMS").get("fields")
for data in datas:
self.fields.append(data)
I'm kinda new to python, flask and firestore database and I can't manage to find what is causing this error, hope my english isn't to bad !我对 python、flask 和 firestore 数据库有点陌生,我无法找到导致此错误的原因,希望我的英语还不错! :-) :-)
FINALLY I FIXED IT !最后我修复了它!
I found out that selectfields only accept tuple, I did this :我发现 selectfields 只接受元组,我这样做了:
items = Items()
items.getItemsDB()
form.itemsFields.choices = []
for fields in items.fields:
form.itemsFields.choices += [(fields, fields)]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.