首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将多个选择项存储在多个数据库中的烧瓶

将多个选择项存储在多个数据库中的烧瓶
EN

Stack Overflow用户
提问于 2022-06-13 12:59:55
回答 1查看 80关注 0票数 0

我有一个表单,其中有两个多选择,一个是从数据库查询(可用)生成的,另一个是空的(选中)。我使用javascript将项目从“可用的”multiselect移动到“Selected”。

在烧瓶中,我想把所有的项目放在“选择的”多重选择到一个与每个公式相关的多到多个数据库中。

这是我的models.py:

代码语言:javascript
复制
formula_hazards = db.Table(
    'formula_hazards',
    db.Column('formula_id', db.Integer, db.ForeignKey('formula.id')),
    db.Column('hazard_id', db.Integer, db.ForeignKey('hazard_statements.id'))
    )

class HazardStatements(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    h_code = db.Column(db.String(20), index=True, unique=True)
    h_phrase = db.Column(db.String(256))
    full_details = column_property(h_code + " " + h_phrase)

    def __repr__(self):
        return f"{self.h_code} {self.h_phrase}"

class Formula(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    number = db.Column(db.Integer, index=True, unique=True)
    signal_word = db.Column(db.String(16), nullable=True)
    
    h_rel = db.relationship('HazardStatements', secondary=formula_hazards, backref='h_rel')

这是我的app.py:

代码语言:javascript
复制
@admin.route('/admin/formulas/add', methods=['GET', 'POST'])
@login_required
def formulaadd():
    if is_super():
        formula_form = FormulaForm()
        hazard_list = HazardStatements.query.order_by(HazardStatements.h_code).all()
        if request.method == 'POST' and formula_form.validate_on_submit():
            new_formula = Formula(
                number = formula_form.number.data,
                signal_word = formula_form.signal_word.data,
                )
            selected_hazards = request.form.getlist('hazard-selected')
            #This is where I'm struggling to figure out how to write each 'selected hazards' to the database.
            db.session.add(new_formula)
            db.session.commit()
            flash('Formula has been added', category='success')
            return redirect(url_for('admin.formulaview'))
       return render_template('/admin/formulas/formula_add.html', title="Add Formula", formula_form=formula_form, hazard_list=hazard_list)

这里是我的HTML/Jinja的良好度量:

代码语言:javascript
复制
<div class="grid-item">
            <label for="hazard-options">Available Hazard Statements</label>
            <select id="hazard-options" name="hazard-options" class="wt-select" multiple="multiple">
                {% for hazard in hazard_list %}
                <option value="{{ hazard.id }}">{{ hazard.h_code }} {{ hazard.h_phrase }}</option>
                {% endfor %}
            </select>
            <button type="button" onclick="leftHazard()">&gt;&gt;</button>
        </div>
        <div class="grid-item">
            <label for="hazard-selected">Selected Hazard Statements</label>
            <select id="hazard-selected" name="hazard-selected" class="wt-select" multiple="multiple"></select>
            <button type="button" onclick="rightHazard()">&lt;&lt;</button>
        </div>

我能够把'new_formula‘数据写到它的表格上,但是我没有写很多对很多人的经验,所以我请求帮助,因为我只是不停地绕着圈跑来跑去想办法弄清楚。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-16 10:08:02

因此,在玩了两天之后,我偶然发现了.extend(),它允许我在app.py文件中编写多到多个值:

代码语言:javascript
复制
selected_hazards = request.form.getlist('hazard-selected') # HAZARD SELECT LOGIC
individual_hazards = HazardStatements.query.filter(HazardStatements.id.in_(selected_hazards))
new_formula.h_rel.extend(individual_hazards)

希望这能帮助其他人解决同样的问题,因为我在无数个小时的搜索中找不到任何清晰的答案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72603318

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档