ошибка в db.session.delete () или validate_on_submit (), UPDATE: ошибка в формах - PullRequest
0 голосов
/ 28 февраля 2020

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

Вот мой код:

@app.route("/task/delete/<int:task_id>", methods=['POST', 'GET'])
def DeleteTask(task_id):
    qry = db.session.query(Task).filter(Task.task_id == task_id)
    tsk = qry.first()
    if tsk:
        formpage = TaskForm(formdata=request.form, obj=tsk)
        print tsk
        if formpage.validate_on_submit():
            db.session.delete(tsk)
            db.session.commit()
            return redirect('/task')
        return render_template('my_html.html', formpage=formpage)

my_db. py

Employee_Task = db.Table('employee_task',
                         db.Column('employee_id', db.Integer, db.ForeignKey('employee.employee_id')),
                         db.Column('task_id', db.Integer, db.ForeignKey('task.task_id'))
                         )

class Employee(db.Model):
    __tablename__ = 'employee'
    employee_id = db.Column(db.Integer, primary_key=True)
    employee_name = db.Column(db.String(100), nullable=True)

class Task(db.Model):
    __tablename__ = 'task'
    task_id = db.Column(db.Integer, primary_key=True)
    task_no = StringField('Task ID.:', validators=[DataRequired(), Length(min=2, max=10)])
    rel_task_employee = db.relationship("Employee", secondary=Employee_Task, backref="rel_employee_task")

my_form.py

class TaskForm(FlaskForm):
    task_no = StringField('Task ID.:', validators=[DataRequired(), Length(min=2, max=10)])
    task_name = StringField('Task Name:', validators=[DataRequired(), Length(min=2, max=50)])
    submit = SubmitField('OK!')

my_ html. html

<form method=post>
    <dl>
        {{ formpage.task_no }}
        {{ formpage.task_name }}
    </dl>
    <p><input type=submit value=Delete>
</form>

print tsk показывает правильные данные
Однако, когда я submit браузер не отвечает.
Где ошибка?

ОБНОВЛЕНИЕ

Я проверяю ошибку проверки с помощью

{% for error in formpage.errors %}
    <div>
        <p>ALERT!</p>
        {{ error }} INVALID
    </div>
{% endfor %}

и получаю следующее сообщение

Alert! Task_no недействителен
Оповещение! csrf_token неверен

Странно,

  1. Относительно csrf_token invalid, я решаю, добавив {{ formpage.csrf_token }} в html
  2. Относительно task_no invalid, Форма работает очень хорошо во время отправки данных в базу данных, я использую ту же форму для удаления этих данных.

Есть идеи для решения пункта 2?

1 Ответ

0 голосов
/ 28 февраля 2020

Вы пытались сделать ваше перенаправление без sla sh, как показано ниже?

return redirect('task')

Еще один способ сделать это - передать функцию url_for() в ваше перенаправление следующим образом:

return redirect(url_for('put_the_function_name_of_your_route_here'))
...