Flask SQLAlchemy无法更新数据库中的单个值

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

当按下勾号按钮时,我希望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 = "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) }}">&#10003;</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) }}">&#10003;</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'))