- У меня есть две таблицы в отношениях один ко многим, в таблице Project есть много отчетов.
- Пока пользователь вводит отчет, ему/ей придется выбрать проект, к которому относится этот отчет, из раскрывающегося списка.
- В раскрывающемся списке указано имя проекта, но add_report() останавливается на
db.session.commit()
, а когда я печатаю _form.project_list.data_, я получаю название проекта вместо внешнего ключа. - Я считаю, что моя проблема в формах, я пробовал много кодов, чтобы получить project_id, но получил ошибку «unprintable InterfaceError object».
- Мой вопрос: Как я могу получить имя проекта номер ID проекта вместо из выпадающего списка?
views.pyWtforms QueryselectField не проходит id
@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
Отображается ли форма и появляется ошибка при отправке формы? Если вы можете проверить свою форму .project_list.data, распечатав ее перед добавлением в базу данных и убедитесь, что вы получили project_id? Я думал, что ваша проблема была на дисплее формы, вам, вероятно, не нужна get_label в QuerySelectField. – bharani
При отладке функции add_report() функция останавливается, когда она попадает на 'db.session.commit()'. Когда я печатаю _form.project_list.data_, я получаю название проекта как _Project 1_ вместо внешнего ключа! – Aseel