1
- 我有兩個表在一對多的關係,表項目有很多報告。
- 當用戶輸入報告問題時,他/她必須從下拉列表中選擇該報告所屬的項目。
- 下拉列表顯示項目名稱,但add_report()停止在
db.session.commit()
,當我打印_form.project_list.data_時,我得到項目名稱而不是外鍵。 - 我相信我的問題是在表單中,我嘗試了很多代碼來獲取project_id,但我得到了「不可打印的InterfaceError對象」錯誤。
- 我的問題: 我怎樣才能獲得項目ID數量,而不是從下拉列表中的項目名稱?
views.py平臺QueryselectField不通過編號
@app.route('/add_report/', methods=['GET', 'POST'])
def add_report():
form = AddReportForm(request.form)
if request.method == 'POST':
if form.validate_on_submit():
new_report = Report(
project_id=form.project_list.data,
issue=form.issue.data)
db.session.add(new_report)
db.session.commit()
flash('New report was successfully added.')
return redirect(url_for('projects'))
else:
flash('All fields are required.')
return redirect(url_for('projects'))
return render_template('project.html', form=form)
Models.py
class Project(db.Model):
project_id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String)
date = db.Column(db.Date)
reports = db.relationship('Report', backref='project', lazy='dynamic')
def __repr__(self):
return self.name
class Report(db.Model):
report_id = db.Column(db.Integer, primary_key=True)
project_id = db.Column(db.Integer, db.ForeignKey('project.project_id'))
issue = db.Column(db.Text)
def __repr__(self):
return self.issue
forms.py
def get_projects():
return Project.query
class AddReportForm(Form):
project_list = QuerySelectField('Project', query_factory=get_projects)
issue = StringField('issue')
非常感謝
謝謝你的回覆, 我試過* get_label ='project_id'*,我得到這個錯誤: sqlalchemy.exc。InterfaceError InterfaceError: –
Aseel
是否顯示錶單並在提交表單上發生錯誤?如果可以,您是否可以在將其添加到數據庫之前先打印它並檢查您的form.project_list.data並確保獲得了project_id?我認爲你的問題是在表單顯示上,你可能不需要QuerySelectField中的get_label。 – bharani
當調試add_report()函數到達db.session.commit()時停止。當我打印_form.project_list.data_時,我得到了像_Project 1_這樣的項目名稱,而不是外鍵! – Aseel