#python #html #flask
#python #HTML #flask
Вопрос:
Я создаю базу данных выборов для университета, используя flask и html для пользовательского интерфейса. У меня есть страница со списком моих кандидатов и их сторон с полем для изменения стороны и кнопкой, которая должна полностью удалить кандидата. Когда я нажимаю кнопку удаления, она изменяет участник на «None».
Дело в том, что когда я полностью удаляю функциональность для изменения участника — кнопки и метода одновременно — кнопка удаляет строку из базы данных, как и предполагалось.
Вот соответствующие методы:
@app.route("/votes/<candidate_id>/", methods=["POST"])
@login_required
def candidate_set_party(candidate_id):
p = Candidate.query.get(candidate_id)
p.party = request.form.get("party")
db.session().commit()
return redirect(url_for("votes_index"))
@app.route("/votes/<candidateid>/", methods=["POST"])
@login_required
def candidate_remove(candidateid):
#c = Candidate.query.get(candidate_id)
print("debug")
db.session().query(Candidate).filter(Candidate.id == candidateid).delete()
#db.session().delete(c)
#votes.delete().where(votes.Candidate.id==candidate_id)
db.session().commit()
#d = addresses_table.delete(Candidate.query.get(id))
#d.execute()
return redirect(url_for("votes_index"))
Вот html-страница:
{% extends "layout.html" %}
{% block body %}
<table>
<tr>
<th>Name</th>
<th>Party</th>
</tr>
{% for candidate in votes %}
<tr>
<td>{{ candidate.name }}</td>
<td>{{ candidate.party }}</td>
<td>
<form method="POST" action="{{ url_for('candidate_set_party', candidate_id=candidate.id) }}">
<input type="text" name="party"/>
<input type="submit" value="Set party"/>
</form>
</td>
<td>
<form method="POST" action="{{ url_for('candidate_remove', candidateid=candidate.id) }}">
<input type="submit" value="Remove candidate"/>
</form>
</td>
<td>
<form method="POST" action="{{ url_for('cast_vote', candidate_id=candidate.id) }}">
<input type="submit" value="Vote"/>
</form>
</td>
</tr>
{% endfor %}
</table>
{% endblock %}
Вот репозиторий на случай, если я что-то пропустил:https://github.com/skajanti/Aanestys
Когда у меня есть функциональность для смены участника в моей программе, candidate_remove вообще не вызывается (отсюда print («debug»)). Вместо этого он каким-то образом изменяет участник на «None» (возможно, представление flask для ввода null?).
Помощь будет оценена.
Ответ №1:
Похоже, что обе ваши функции candidate_remove и candidate_set_party зарегистрированы в одних и тех же маршрутах и методах.
У них должны быть уникальные маршруты. Я приведу пример, на случай, если я не совсем ясно выражаюсь.
@app.route("/set-party/<candidate_id>/", methods=["POST"])
@login_required
def candidate_set_party(candidate_id):
p = Candidate.query.get(candidate_id)
p.party = request.form.get("party")
db.session().commit()
return redirect(url_for("votes_index"))
@app.route("/remove-candidate/<candidateid>/", methods=["POST"])
@login_required
def candidate_remove(candidateid):
db.session().query(Candidate).filter(Candidate.id == candidateid).delete()
db.session().commit()
return redirect(url_for("votes_index"))
HTML может оставаться неизменным.