Flask SQLAlchemy无法更新数据库中的单个值
当按下勾号按钮时,我希望post状态标记为“完成” 我尝试了一个简单的post.status=“completed”和一些sqlalchemy routes.py:Flask SQLAlchemy无法更新数据库中的单个值,flask,flask-sqlalchemy,Flask,Flask Sqlalchemy,当按下勾号按钮时,我希望post状态标记为“完成” 我尝试了一个简单的post.status=“completed”和一些sqlalchemy routes.py: @app.route("/post/<int:post_id>/markcomplete", methods=['POST']) def mark_complete(post_id): post = Post.query.get_or_404(post_id) # post.status = "comp
@app.route("/post/<int:post_id>/markcomplete", methods=['POST'])
def mark_complete(post_id):
post = Post.query.get_or_404(post_id)
# post.status = "completed"
db.session.query(post).filter(post.id == post_id).update({post.status:"completed"})
db.session.commit()
return redirect(url_for('home'))
home.html
{% block content %}
<div class="Blocks">
<div id="First">
<p align="right">
<a class="btn btn-primary" class="nav-item nav-link" href="{{ url_for('all') }}" role="button">Show All</a>
<a class="btn btn-primary" class="nav-item nav-link" href="{{ url_for('new_post') }}" role="button">New Post</a>
<a class="btn btn-primary" data-toggle="collapse" href="#collapseExample" role="button"
aria-expanded="false" aria-controls="collapseExample">Quick Expand</a>
</p>
<table style="leftside" align="center">
<tr style="border-bottom:1pt solid black;">
<th>Title</th>
<!--<th>Status</th>-->
<th>Priority</th>
<th>Datetime</th>
<th>Assigned To</th>
<th>Reported By</th>
<th>Edit</th>
<th></th>
<th></th>
</tr>
{% for post in posts %}
{% if 'ongoing' in post.status %}
<tr>
<td><a class="article-title" href="{{ url_for('post', post_id=post.id) }}">{{ post.title }}</a></td>
<!--<td>{# {{ post.status }} #}</td>-->
<td>{{ post.priority }}</td>
<td><strong><small>{{ post.date_posted }}</small></strong></td>
<td><small>{{ post.assigned_to }}</small></td>
<td><small>{{ post.reported_by }}</small></td>
<td><a class="btn btn-primary" class="article-title" href="{{ url_for('update_post', post_id=post.id) }}">Edit</a></td>
<td><a class="btn btn-primary" class="article-title" href="{{ url_for('mark_complete', post_id=post.id) }}">✓</a></td>
{% endif %}
<td colspan="5">
<div class="collapse" id="collapseExample"><div class="card card-body">{{ post.description }}</div></div>
</td>
</tr>
{% endfor %}
</table>
</div>
{% endblock content %}
{%block content%}
标题
优先
日期时间
分配给
报告人
编辑
{posts%%中的post为%s}
{%如果post.status%中的“正在进行中”}
{{post.priority}}
{{post.date_posted}}
{{post.assigned_to}}
{{post.reported_by}}
{%endif%}
{{post.description}}
{%endfor%}
{%endblock内容%}
错误:
方法不允许
请求的URL不允许使用该方法。请尝试以下操作:
所有链接的url_都是GET请求
@app.route("/post/<int:post_id>/markcomplete", methods=['GET', 'POST'])
def mark_complete(post_id):
post = Post.query.get_or_404(post_id)
post.status = "completed"
db.session.add(post)
db.session.commit()
return redirect(url_for('home'))
@app.route(“/post//markcomplete”,方法=['GET','post']))
def标记完成(post id):
post=post.query.get\u或\u 404(post\u id)
post.status=“已完成”
db.session.add(post)
db.session.commit()
返回重定向(url_for('home'))
遗憾的是,这产生了同样的问题:不允许使用方法-请求的URL不允许使用该方法。谢谢,我已经在问题中添加了home.html。明白了!谢谢你的帮助。它只是简单地改变了get和post的方法吗?如果是,为什么我的删除路由不需要这个?谢谢
{% block content %}
<div class="Blocks">
<div id="First">
<p align="right">
<a class="btn btn-primary" class="nav-item nav-link" href="{{ url_for('all') }}" role="button">Show All</a>
<a class="btn btn-primary" class="nav-item nav-link" href="{{ url_for('new_post') }}" role="button">New Post</a>
<a class="btn btn-primary" data-toggle="collapse" href="#collapseExample" role="button"
aria-expanded="false" aria-controls="collapseExample">Quick Expand</a>
</p>
<table style="leftside" align="center">
<tr style="border-bottom:1pt solid black;">
<th>Title</th>
<!--<th>Status</th>-->
<th>Priority</th>
<th>Datetime</th>
<th>Assigned To</th>
<th>Reported By</th>
<th>Edit</th>
<th></th>
<th></th>
</tr>
{% for post in posts %}
{% if 'ongoing' in post.status %}
<tr>
<td><a class="article-title" href="{{ url_for('post', post_id=post.id) }}">{{ post.title }}</a></td>
<!--<td>{# {{ post.status }} #}</td>-->
<td>{{ post.priority }}</td>
<td><strong><small>{{ post.date_posted }}</small></strong></td>
<td><small>{{ post.assigned_to }}</small></td>
<td><small>{{ post.reported_by }}</small></td>
<td><a class="btn btn-primary" class="article-title" href="{{ url_for('update_post', post_id=post.id) }}">Edit</a></td>
<td><a class="btn btn-primary" class="article-title" href="{{ url_for('mark_complete', post_id=post.id) }}">✓</a></td>
{% endif %}
<td colspan="5">
<div class="collapse" id="collapseExample"><div class="card card-body">{{ post.description }}</div></div>
</td>
</tr>
{% endfor %}
</table>
</div>
{% endblock content %}
@app.route("/post/<int:post_id>/markcomplete", methods=['GET', 'POST'])
def mark_complete(post_id):
post = Post.query.get_or_404(post_id)
post.status = "completed"
db.session.add(post)
db.session.commit()
return redirect(url_for('home'))