Показ кнопки типа «нравится / не нравится» в зависимости от предпочтения - PullRequest
0 голосов
/ 04 июля 2019

Я пытаюсь добавить кнопку «Мне нравится / не нравится» в обзорах спортзала пользователя в колбе.Я хочу показать кнопку «Мне нравится», если пользователю не понравился отзыв, и кнопку «Не нравится», если пользователю она уже понравилась.

Моя БД настроена таким образом, что у меня есть таблица пользователей, таблица отзывов и любимая таблица, которая ссылается на таблицу пользователей и таблицу отзывов через внешние ключи.Когда пользователю нравится, запись вставляется в понравившуюся таблицу, а когда пользователю не нравится, эта запись удаляется.

В моем текущем приложении есть маршрут, в котором перечислены детали спортивного зала и все его отзывы.Если пользователь вошел в систему, он может редактировать / удалять свой отзыв, а также нравится / в отличие от обзора других людей.

Как показать кнопку «Мне нравится», если пользователь не понравился, и кнопку «В отличие», если пользователю уже понравился обзор?

Маршрут для спортзала

@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 %}

Я пытаюсьподумать, какой запрос я могу написать по маршруту в тренажерном зале, который я могу передать шаблону, чтобы он знал, нравится ли пользователю определенный отзыв.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...