это мое первое python приложение, и я следую этому уроку. https://scotch.io/tutorials/build-a-crud-web-app-with-python-and-flask-part-one.
Кажется, у меня возникли проблемы с информацией, которую я ввожу в форму, показывая на веб-странице, все поля работают нормально, кроме «Курс» и «Лектор» , Я попытался изменить таблицы / модели, но это не сработало. Вот раздел моей страницы views.py
@admin.route('/tasterdays/add', methods=['GET', 'POST'])
@login_required
def add_tasterdays():
"""
Add a Tasterday to the database
"""
check_admin()
add_tasterdays = True
form = TasterDayForm()
if form.validate_on_submit():
tasterdays = TasterDay(name=form.name.data,
description=form.description.data,
date=form.date.data,
course=form.course.data,
lecturer=form.lecturer.data)
try:
# add tasterday to the database
db.session.add(tasterdays)
db.session.commit()
flash('You have successfully added a new Taster Day.')
except:
# in case tasterday already exists
flash('Error: Taster Day already exists.')
# redirect to tasterdays page
return redirect(url_for('admin.list_tasterdays'))
# load tasterdays template
return render_template('admin/tasterdays/tasterday.html', action="Add",
add_tasterdays=add_tasterdays, form=form,
title="Add Taster Day")
Когда я удаляю course=form.course.data,
lecturer=form.lecturer.data
из if form.validate_on_submit():
, форма отправляет, однако таблица заполняет эти разделы "none". когда я сохраняю их, форма говорит, что этот дегустационный день уже существует, хотя его нет. Вот 3/4 моих таблиц / моделей:
class Course(db.Model):
"""
Create a courses table
"""
__tablename__ = 'courses'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(60), unique=True)
description = db.Column(db.String(200))
students = db.relationship('Student', backref='Course',
lazy='dynamic')
def __repr__(self):
return '<Course: {}>'.format(self.name)
class TasterDay(db.Model):
"""
Create a tasterdays table
"""
__tablename__ = 'tasterdays'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(60), unique=True)
description = db.Column(db.String(200))
date = db.Column(db.Date, index=True)
course = db.Column(db.String(60), index=True)
lecturer = db.Column(db.String(60), index=True)
students = db.relationship('Student', backref='tasterdays',
lazy='dynamic')
def __repr__(self):
return '<tasterdays: {}>'.format(self.name)
class Lecturer(db.Model):
"""
Create a lecturer table
"""
__tablename__ = 'lecturers'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(60), unique=True)
course_id = db.Column(db.Integer, db.ForeignKey('courses.id'))
taster_day_id = db.Column(db.Integer, db.ForeignKey('tasterdays.id'))
def __repr__(self):
return '<Lecturer: {}>'.format(self.name)
и вот форма, которая заполняется:
class TasterDayForm(FlaskForm):
"""
Form for admin to add or edit a taster day
"""
name = StringField('Name', validators=[DataRequired()])
date = DateField('Date (DD-MM-YYYY)', format='%d-%m-%Y')
course = StringField('Course', validators=[DataRequired()])
lecturer = StringField('Lecturer', validators=[DataRequired()])
description = StringField('Description', validators=[DataRequired()])
submit = SubmitField('Submit')
Вот html для формы:
<div class="center">
<table class="table table-striped table-bordered">
<thead>
<tr>
<th width="15%"> Name </th>
<th width="40%"> Description </th>
<th width="40%"> Date </th>
<th width="40%"> Course </th>
<th width="40%"> Lecturer </th>
<th width="15%"> Student Count </th>
<th width="15%"> Edit </th>
<th width="15%"> Delete </th>
</tr>
</thead>
<tbody>
{% for tasterdays in tasterdays %}
<tr>
<td> {{ tasterdays.name }} </td>
<td> {{ tasterdays.description }} </td>
<td> {{ tasterdays.date }} </td>
<td> {{ tasterdays.course }} </td>
<td> {{ tasterdays.lecturer }} </td>
<td>
{% if tasterdays.students %}
{{ tasterdays.students.count() }}
{% else %}
0
{% endif %}
</td>
<td>
<a href="{{ url_for('admin.edit_tasterdays', id=tasterdays.id) }}">
<i class="fa fa-pencil"></i> Edit
</a>
</td>
<td>
<a href="{{ url_for('admin.delete_tasterdays', id=tasterdays.id) }}">
<i class="fa fa-trash"></i> Delete
</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
Я бы хотел заполнить поля как для лекторов, так и для курсов, и чтобы они появлялись после нажатия кнопки Отправить.
Пожалуйста, дайте мне знать, если потребуется дополнительная информация.