繁体   English   中英

使用来自 firestore 的数据填充 WTForms 选择字段

[英]Populate a WTForms selectfield with data coming from firestore

所以...我正在尝试使用来自firestore数据库的数据从选择selectfield动态填充选项。 我从我的 Items 类初始化一个新对象,我加载名为AjouterForm()表单,然后我调用我的函数getItemsDB() ) 使用来自 firestore db 的数据填充 var fields (它是一个列表),最后我尝试填充选择字段itemFields

我可以启动该程序,但是当我继续“ajouter”时出现错误:

ValueError:解包的值太多(预期为 2)

路线.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

<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>

表格.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')

模型.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)

我对 python、flask 和 firestore 数据库有点陌生,我无法找到导致此错误的原因,希望我的英语还不错! :-)

最后我修复了它!

我发现 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM