我在一个带有flask的crm项目上有一个“编辑任务”页面,我已经构建了一个POST路由来更新数据库,然后重定向到“任务页面”。然而,我不断收到
AttributeError
,因为:'NoneType' object has no attribute 'tarefa'
。但是,我已经在数据库上声明了“tarefa”,它是用户传递的任务应该是什么的文本:
class Tarefas(db.Model):
id: Mapped[int] = mapped_column(Integer, primary_key=True)
cliente_id: Mapped[int] = mapped_column(Integer, nullable=False)
tarefa: Mapped[str] = mapped_column(String(250))
tipo: Mapped[str] = mapped_column(String(250))
prioridade: Mapped[str] = mapped_column(String(250))
prazo: Mapped[Date] = mapped_column(Date)
status: Mapped[str] = mapped_column(String(250))
observacao: Mapped[str] = mapped_column(String(500), nullable=True)
mesa: Mapped[int] = mapped_column(Integer)
这是我的后端:
@app.route('/editar_tarefa/<int:id>', methods=["POST", "GET"])
@login_required
def editar_tarefa(id):
if request.method == "POST":
tarefa = request.form.get('tarefa')
prioridade = request.form.get('prioridade')
prazo = request.form.get('prazo')
prazo = datetime.strptime(prazo, "%Y-%m-%d").date() if prazo else None
status = request.form.get('status')
observacao = request.form.get('observacao')
mesa = request.form.get('mesa')
if mesa == 'mesa':
mesa = 1
else:
mesa = 0
with app.app_context():
tarefa_to_update = db.session.execute(db.select(Tarefas).where(Tarefas.id == id)).scalar()
print(tarefa_to_update.tarefa )
tarefa_to_update.tarefa = tarefa
tarefa_to_update.prioridade = prioridade
tarefa_to_update.prazo = prazo
tarefa_to_update.status = status
tarefa_to_update.observacao = observacao
tarefa_to_update.mesa = mesa
db.session.commit()
return redirect(url_for("tarefas"))
user_name = session.get('user_name')
result = db.session.execute(db.select(Tarefas).where(Tarefas.id == id))
tarefa = result.scalar()
return render_template("editar_tarefa.html", tarefa=tarefa, user_name=user_name)
当我第一次遇到这个问题时,我添加了“with app.app_context():”,但没有解决。我还使用 SQLite 软件的 DB Browser 验证了我的数据库,名称如声明的那样。
我该如何解决?
问题是对象
tarefa_to_update
是None
。
此返回无:
db.session.execute(db.select(Tarefas).where(Tarefas.id == id)).scalar()
你应该使用:
tarefa_to_update = db.session.execute(db.select(Tarefas).where(Tarefas.id == id)).scalar()
if tarefa_to_update is None:
# return a 404 or raise exception