Python flask форма, возвращающая «Нет», когда введено значение - PullRequest
0 голосов
/ 22 апреля 2020

это мое первое 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>

Я бы хотел заполнить поля как для лекторов, так и для курсов, и чтобы они появлялись после нажатия кнопки Отправить.

Пожалуйста, дайте мне знать, если потребуется дополнительная информация.

1 Ответ

0 голосов
/ 22 апреля 2020

удалось решить это сам.

Удалено «index = True» как для курса, так и для лектора в таблице tasterdays, и поля успешно заполняются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...