Проблема, с которой вы столкнулись, связана с тем, что ваш маршрут `/add_comment` не принимает параметр `id`. Нужно передать `id` в URL, чтобы Flask мог правильно его обработать. В вашем текущем маршруте `add_comment` не указано, как передать этот параметр.
Вот как вы можете обновить ваш маршрут и обработчик:
1. Обновите маршрут, чтобы он принимал параметр `id`:
```python
@app.route('/add_comment/<int:id>', methods=['GET', 'POST'])
def add_comment(id):
```
2. Убедитесь, что при отправке формы вы передаете `id` карточки, к которой добавляется комментарий. Пример формы может выглядеть следующим образом:
```html
<form action="{{ url_for('add_comment', id=card.id) }}" method="post">
<textarea name="text" required></textarea>
<button type="submit">Добавить комментарий</button>
</form>
```
3. В вашем обработчике вы используете `Cards.query.get(id)`, чтобы получить карточку. Однако вы не можете просто передать объект `post_com` в комментарий. Вместо этого вам нужно передать `post_com.id` (или просто `id`) в качестве `card_id`. Исправьте это в следующем фрагменте кода:
```python
comment = Comments(text_comment=text, user_id=author_com, card_id=post_com.id)
```
Теперь ваш полный код обработчика будет выглядеть так:
```python
@app.route('/add_comment/<int:id>', methods=['GET', 'POST'])
def add_comment(id):
if request.method == 'POST':
author_com = current_user.id
post_com = Cards.query.get(id)
text = request.form['text']
comment = Comments(text_comment=text, user_id=author_com, card_id=post_com.id)
try:
db.session.add(comment)
db.session.commit()
flash("Комментарий успешно добавлен")
return redirect('index')
except Exception as e:
db.session.rollback() # откатить транзакцию в случае ошибки
flash("Ошибка при добавлении комментария: " + str(e))
return redirect('/index')
else:
flash("Необходимо заполнить все поля")
return redirect('/index')
```
Не забудьте также обработать возможные исключения, чтобы откатить транзакцию в случае возникновения ошибок. Удачи с вашим проектом!