Я учусь Python и у меня есть учебный проект, как я go. Я использую wtforms, flask -wtf, sqlalchemy и базу данных MySQL. У меня есть панель управления, которая выводит количество записей, связанных с указанным пользователем c, каждая строка имеет свою собственную кнопку отправки, которая ведет меня к маршруту для редактирования записи. У меня уже есть работающая кнопка добавления и кнопка выхода из системы.
Однако моя проблема в том, что при нажатии на кнопку «Изменить», которую я нажимаю, я могу редактировать только первую запись, так как у меня нет способа определить, какую кнопку я нажал и, следовательно, какую запись она была. для и, следовательно, какую запись для редактирования.
Приложение имеет 2 таблицы в настоящее время - пользователь и танк.
Код формы
class DashboardForm(FlaskForm):
edit = SubmitField('Edit')
add = SubmitField('Add New Tank')
logout = SubmitField('Logout')
Маршруты
@app.route('/', methods=['GET','POST'])
@login_required
def dashboard():
dashboard_form = DashboardForm()
tanks = Tank.query.filter_by(owner_id=current_user.id)
if request.method == 'POST':
if dashboard_form.validate_on_submit():
if dashboard_form.logout.data:
return redirect(url_for('logout'))
if dashboard_form.edit.data:
return redirect(url_for('edit_tank'))
if dashboard_form.add.data:
return redirect(url_for('add_tank'))
"""Serve logged-in Dashboard."""
return render_template('dashboard.html',
title='Your Fish Tank',
template='dashboard-template',
current_user=current_user,
form=dashboard_form,
tanks = tanks,
body="You are now logged in!")
@app.route("/edit_tank", methods = ['GET', 'POST'])
@login_required
def edit_tank():
tank = Tank.query.filter_by(owner_id=current_user.id).first()
tank_form = TankForm(obj=tank)
if request.method == 'POST':
if tank_form.cancel.data:
return redirect(url_for('dashboard'))
if tank_form.validate_on_submit():
if tank_form.add.data:
tank_form.populate_obj(tank)
db.session.commit()
return redirect(url_for('dashboard'))
return render_template('add_tank.html', form=tank_form, title='Edit Tank Details')
HTML шаблон для приборной панели
{% extends "base page.html" %}
{% block content %}
<br><br>
<form method="POST">
{{ form.hidden_tag() }}
<table>
<tr>
<th> Tank Name </th>
<th> Size (litres) </th>
<th> Type </th>
</tr>
{% for tank in tanks %}
<tr>
<td> {{ tank.tank_name }} </td>
<td> {{ tank.size_litres }} </td>
<td> {{ tank.tank_type }} </td>
<td> {{ form.edit }} </td>
</tr>
{% endfor %}
</tr>
</table>
<br><br>
{{ form.add }}
{{ form.logout }}
</form>
Я знаю, что фильтр запросов на маршруте edit_tank извлекает только первое значение - это просто для того, чтобы он хотя бы позволил мне выполнить код, и он не потерпит неудачу. Теперь я хочу изменить этот запрос, чтобы выбрать конкретную запись c, основанную на том, что нажимается на панели инструментов. Может быть, то, как я это сделал, неосуществимо, но у кого-нибудь есть идеи, пожалуйста