我有一個表單,其中有兩個多選,一個是從資料庫查詢(可用)生成的,另一個是空的(已選擇)。我使用 javascript 將專案從“可用”多選移動到“已選”。

在燒瓶中,我想將放置在“選定”多選中的所有專案存盤到與每個公式關聯的多對多資料庫中。
這是我的models.py:
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:
@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 很好的衡量標準:
<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()">>></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()"><<</button>
</div>
我能夠將“new_formula”資料寫入它的表格,但我在寫多對多方面不是很有經驗,所以我正在尋求幫助,因為我一直在繞圈子試圖弄清楚它出去。
uj5u.com熱心網友回復:
因此,在玩了 2 天后,我偶然發現了 .extend() ,它允許我在 app.py 檔案中寫入多對多值:
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)
希望這會幫助其他有同樣問題的人,因為我在無數小時的搜索中找不到任何明確的答案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/491910.html
標籤:Python mysql 烧瓶 sqlalchemy 多对多
