bimka
@bimka
Осваиваю Питон

Как реализовать систему рейтинга?

Создаю учебное приложение на джанго - сайт с анекдотами. У каждого поста есть свой рейтинг. Каждый пользователь может поставить " + " и " - ".
Как при нажатии на " + " сделать так, чтобы в базе данных joke_rating увеличивался на один? Причем пользователь при нажатии на ссылку должен оставаться на той же странице, и может проголосовать только один раз.

index.html:
{% extends "blog/base.html" %}
{% block content %}
    {% if jokes_pages %}
        {% for joke in jokes_pages %}
            <div class="container">
                <div class="right-align"># {{joke.id}}</div>
                <div>{{joke.joke_text}}</div>
                <div class="right-align"><a href="pass" shape="None">&#8211</a> | {{joke.joke_rating}} | <a href={{joke.joke_rating|add:1}}>+</a></div>
            </div>
        {% endfor %}
        <ul>
            {% if jokes_pages.has_previous %}
                <li><a href = "?page={{ jokes_pages.previous_page_number }}">Предыдущая страница</a></li>
                {% else %}
                <li><a title = "Предыдущей страницы нет">Предыдущая страница</a></li>
                {% endif %}
            {% if jokes_pages.has_next %}
                <li><a href = "?page={{ jokes_pages.next_page_number }}">Следующая страница</a></li>
                {% else %}
                <li><a title = "Следующей страницы нет">Следующая страница</a></li>
                {% endif %}
        </ul>
    {% else %}
        <p>В базе данных нет анекдотов</p>
    {% endif %}
{% endblock %}


619403b89ad0a447940161.png
  • Вопрос задан
  • 724 просмотра
Пригласить эксперта
Ответы на вопрос 2
@Neiz-Kap
Помимо того, что при выборе + заблокировалась возможность снова на неё нажать, то ещё нужно, чтобы могли нажать на -, а то и вообще отменить оценку при повторном нажатии на ту кнопку, которую в последний раз нажимали.

Могу предложить создать колонку isGoodRating в бд, по-умолчанию она будет пустой строкой isGoodRating = "" в колонку таблицу ЗаписиПользователяРейтинг(или как у тебя называется)

Для чего она нужна?
Если isGoodRating пустая строка, то значит пользователь не выбирал ничего или отменил вообще свою оценку. Если true, то нажал на плюс, если false, то минус

Частичная реализация
На клиенте
по-нажатию на кнопку + будет похожая функция

onClickPlusRating = () => {
  // если пользователь не нажимал на кнопку +
  // условие !isChoiseRating, не считается
  if (isChoiseRating !== true) {
    isChoiseRating = true;
    rating++;
  }
  // если повторно нажал на кнопку +
  else {
    isChoiseRating = "";
    rating--;
  }
  // отправляем запрос на сервер на изменение рейтинга и колонки isChoiseRating
};


С нажатием на - аналогичным образом, только вместо true будет false. Надеюсь поймёшь)

А ещё можно подсвечивать оценку, если она изменена пользователем, поставив условие:
isChoiseRating !== ""
Ответ написан
Комментировать
@vladis005
Начинающий веб разработчик
Посмотри здесь реализовывали рейтинг пользователей https://github.com/Vladislava05/TaskMaster
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы