【发布时间】:2015-07-07 17:11:34
【问题描述】:
- 我有两个一对多关系的表,表 Project 有很多 Reports。
- 当用户输入报告问题时,她/他必须从下拉列表中选择该报告所属的项目。
- 下拉列表显示项目名称,但 add_report() 在
db.session.commit()处停止,当我打印 _form.project_list.data_ 时,我得到 项目名称 而不是外键. - 我相信我的问题出在表单上,我尝试了很多代码来获取 project_id,但我得到了“无法打印的 InterfaceError 对象”错误。
- 我的问题: 如何从下拉列表中获取项目 id 编号而不是项目名称?
views.py
@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')
非常感谢
【问题讨论】:
标签: python-2.7 flask sqlalchemy wtforms