Я пытаюсь добавить кнопку «Мне нравится / не нравится» в обзорах спортзала пользователя в колбе.Я хочу показать кнопку «Мне нравится», если пользователю не понравился отзыв, и кнопку «Не нравится», если пользователю она уже понравилась.
Моя БД настроена таким образом, что у меня есть таблица пользователей, таблица отзывов и любимая таблица, которая ссылается на таблицу пользователей и таблицу отзывов через внешние ключи.Когда пользователю нравится, запись вставляется в понравившуюся таблицу, а когда пользователю не нравится, эта запись удаляется.
В моем текущем приложении есть маршрут, в котором перечислены детали спортивного зала и все его отзывы.Если пользователь вошел в систему, он может редактировать / удалять свой отзыв, а также нравится / в отличие от обзора других людей.
Как показать кнопку «Мне нравится», если пользователь не понравился, и кнопку «В отличие», если пользователю уже понравился обзор?
Маршрут для спортзала
@bp.route("/gyms/<int:gym_id>")
def gym(gym_id):
gym = db.execute("SELECT * FROM gyms JOIN locations ON locations.id = gyms.location WHERE gyms.id = :id", {"id": gym_id}).fetchone()
ratings = db.execute("""SELECT gym_id, reviews.rating, reviews.rating_training, reviews.rating_facility,
reviews.rating_location, reviews.review, reviews.review_date, users.username,
users.id AS userid, reviews.stay_length, reviews.id AS reviewid, COUNT(likes.liked) as count
FROM reviews
JOIN users ON users.id = reviews.user_id
LEFT JOIN likes ON reviews.id = likes.review_id
WHERE gym_id = :gym_id
GROUP BY reviews.id, users.username, users.id
ORDER BY reviews.review_date DESC""", {"gym_id": gym_id}).fetchall()
return render_template("main_app/gym.html", gym = gym, ratings = ratings)
Like Route
@bp.route('/<int:id>/like', methods=['POST'])
@login_required
def like_review(id):
error = None
user_id = session.get('user_id')
gym = get_gym(id)
if db.execute("SELECT * FROM likes WHERE review_id = :review_id AND user_id = :user_id", {"review_id": id, "user_id": user_id}).rowcount != 0:
error = "You already liked this review!"
if error is None:
db.execute("INSERT INTO likes (review_id, user_id, liked) VALUES (:review_id, :user_id, :liked)", {"review_id": id, "user_id": user_id, "liked": "1"})
db.commit()
flash('Liked!', category='success')
return redirect(url_for('main_app.gym', gym_id = gym['gym_id']))
flash(error, 'error')
return redirect(url_for('main_app.gym', gym_id = gym['gym_id']))
gym.html Фрагмент шаблона Jinja:
{% for rating in ratings %}
......
{% if g.user['id'] == rating['userid'] %}
(show Edit/Delete review buttons)
{% elif g.user %}
(currently shows both like/unlike buttons) ****will like to change***
{% endif %}
..........
{% else %}
...........
{% endfor %}
Я пытаюсьподумать, какой запрос я могу написать по маршруту в тренажерном зале, который я могу передать шаблону, чтобы он знал, нравится ли пользователю определенный отзыв.