Python 使用flask从HTML表中删除单个SQLAlchemy行
我创建了一个HTML表,其中列出了SQLAlchemy表中的许多行。该表是使用jinja2模板通过循环创建的:Python 使用flask从HTML表中删除单个SQLAlchemy行,python,flask,sqlalchemy,flask-sqlalchemy,flask-wtforms,Python,Flask,Sqlalchemy,Flask Sqlalchemy,Flask Wtforms,我创建了一个HTML表,其中列出了SQLAlchemy表中的许多行。该表是使用jinja2模板通过循环创建的: {% for single_merchant in merchants %} <tr> <td>{{single_merchant.id}}</td> <td><button type="button" class="btn btn-sm
{% for single_merchant in merchants %}
<tr>
<td>{{single_merchant.id}}</td>
<td><button type="button" class="btn btn-sm btn-outline-danger">Delete</button>
</tr>
在app.py中,我创建了一个if语句:
if delete_form.validate_on_submit():
print(f"merchant to delete ID - {delete_form.delete.id}")
我希望在输出中获得single_merchant.id
,并在if语句中使用它从我的SQLAlchemy表中删除特定的商户,但是我在输出merchant中删除id-delete
,即使从HTML文件中id
属性的值为1,因为{{single_merchant.id}
为1
有没有一种方法可以从HTML表中执行SQLAlchemy行删除?下面是一个HTML表的大致示例:
执行一个路由来处理删除:
def merch_delete(mid):
merch = Merchant.query.filter_by(id=mid).first()
if merch:
msg_text = 'Merchant %s successfully removed' % str(merch)
cs.delete(merch)
cs.commit()
flash(msg_text)
return redirect(url_for('merchants_view'))
然后,将以下内容添加到jinja表的列中:
<a href="{{ url_for('merch_delete', mid=single_merchant.id) }}"
onclick="return confirm('Do you want to permanently delete merchant {{ merchant }}?');" title="Delete Merchant">
<i class="material-icons" style="font-size:16px">delete</i></a>
图标和Js验证步骤是可选的。您也可以使用原始方法,只需在具有删除按钮的表单中添加一个隐藏字段,其中的值可以是您的id。然后您只需显式定义
csrf\u令牌
,而不是使用隐藏标记()
方法
在WtfForm类对象中定义一个隐藏字段,如:
类删除形式(烧瓶形式):
delete_id=HiddenField(“隐藏表行id”)
删除=提交字段(“删除”)
请注意,我翻转了
和
以使整个表格数据单元格就是表单
{% for single_merchant in merchants %}
<tr>
<td>{{single_merchant.id}}</td>
<td>
<form method="post">
{{ delete_form.csrf_token }}
{{ delete_form.delete_id(value=single_merchant.id) }}
{{ delete_form.delete(class="btn btn-danger") }}
</form>
</td>
</tr>
如果要将条目\u to_delete
行与db.session.delete()
相结合,只需将使用隐藏字段数据属性的查询放入对delete()的调用中即可
method。我喜欢将这些部分分开,以防在删除之前需要对找到的条目执行任何附加操作,但这并不重要
这是我为家人开发的一个应用程序的截图,它允许我的孩子为我们的迪斯尼假期添加建议。我没有像你那样使用很酷的垃圾桶图标,但你明白了
Js通知实际上非常有用。谢谢
{% for single_merchant in merchants %}
<tr>
<td>{{single_merchant.id}}</td>
<td>
<form method="post">
{{ delete_form.csrf_token }}
{{ delete_form.delete_id(value=single_merchant.id) }}
{{ delete_form.delete(class="btn btn-danger") }}
</form>
</td>
</tr>