progammist
progammistҚаң. 1, 2021, 5:44 Т.Қ.

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

django, rating

Всем привет. Вопрос такой. У меня есть мини-блог и профили пользователей. На странице профилей пользователей я отображаю информацию:

Количество комментариев этого пользователя;
Количество постов этого пользователя;

Я отображаю количество комментариев в пользовательском профиле шаблона следующим образом:

{{user.comments.count}}

Хотелось бы сделать небольшую рейтинговую систему, например:

Если пользователь оставил 10 комментариев и 10 постов - он кот (слово рядом с username, например).
Если 20 - это собака (слово рядом с username, например).
30 - слон и др.

Для этого я хотел бы иметь отдельную таблицу в базе данных, чтобы потом я мог делать выбор по рейтингу пользователей. Это слово я бы хотел выводить потом везде, где упоминается пользователь (например рядом с ником в комментарии)

Как я могу это реализовать? Буду благодарен за любую помощь

Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

5
Илья Чичак
  • Қаң. 2, 2021, 8:52 Т.Ж.

я бы сделал кастомный queryset, в котором делал бы аннотацию count, а потом исходя из этого делал бы выводы
второй вариант - сделать функцию, которая бы делала count комментов, которые оставил этот пользователь, а потом исходя из этого возвращала бы константу его типов

    progammist
    • Қаң. 3, 2021, 9:30 Т.Ж.
    • (өңделген)

    А как это можно привязать например к закаладкам? Закладки делал по статье

    Попробовал так:

    def user_ratings (request):
        user = request.user
        count_of_posts = user.bookmarkarticle_set.count()
        titles = {
            range(1, 10): 'Кошка',
            range(10, 20): 'Собака',
            range(20, 30): 'Слон'
            # add more titles
        }
        user_title = ''
        for key in titles:
            if count_of_posts in key:
                user_title = titles[key]
        return render(request, 'user.html', {'user': user,
                                             'user_title': user_title})
    

    Но ничего не выводится. Если у вас есть время, не могли бы вы показать - как бы это реализовали вы?

      Илья Чичак
      • Қаң. 4, 2021, 4:23 Т.Ж.
      In [1]: def user_rating(user):
         ...:     titles = {
         ...:     range(0, 10): '1',
         ...:     range(10, 20): '2'
         ...:     }
         ...:     for key, name in titles.items():
         ...:         if user.c in key:
         ...:             return name
         ...: 
      
      In [2]: class U:
         ...:     def __init__(self, c):
         ...:         self.c = c
         ...: 
      
      In [3]: user_rating(U(5))
      Out[3]: '1'
      

      у меня вот так получилось

      я бы сделал эту функцию отдельно и сделал бы ранний return - у вас будет перебираться весь словарь titles, хотя нужное значение может быть в самом начале

      а уже в представлении вызывал бы функцию

        progammist
        • Қаң. 4, 2021, 9:39 Т.Ж.
        • (өңделген)

        Спасибо, вроде появляется понимание, а в предатвелнии вызывать функцию - это как (в плане синаксиса) ?)
        И еще, если я захочу привязать эту логику к количеству комментариев пользователя,то где мне указать comment.count ?
        Комментарии вывожу в шаблоне так:

        {{user.comments.count}}
        
          Илья Чичак
          • Қаң. 4, 2021, 12:55 Т.Қ.
          • (өңделген)

          не, вы сейчас про шаблоны
          для шаблонов надо делать тэги (я бы использовал inclusion tag) - https://docs.djangoproject.com/en/3.1/howto/custom-template-tags/#inclusion-tags

          представления - это то, что

          def index_view(request):
              return render(...)
          

          но лучше вообще это не использовать - шаблоны оч медленно работают (если python код загружается в память, то шаблоны при каждом обращении ищутся и обрабатываются с нуля, а работа с файловой системой сильно медленнее, чем работа с оперативой памятью)

          я имел в виду:

           def profile_view(request, ...):
              ...
              user_rating = get_user_rating(user)
              ...
              return render(request, ..., {'user_rating': user_rating, ...})
          

          тоесть, вернуть эту функцию там, где надо

            Пікірлер

            Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
            Кіріңіз немесе Тіркеліңіз
            Г

            C++ - Тест 001. Первая программа и типы данных

            • Нәтиже:66ұпай,
            • Бағалау ұпайлары-1
            t

            C++ - Тест 001. Первая программа и типы данных

            • Нәтиже:33ұпай,
            • Бағалау ұпайлары-10
            t

            Qt - Тест 001. Сигналы и слоты

            • Нәтиже:52ұпай,
            • Бағалау ұпайлары-4
            Соңғы пікірлер
            G
            GoattRockҚыр. 3, 2024, 1:50 Т.Қ.
            Linux жүйесінде файлдарды қалай көшіруге болады Задумывались когда-нибудь о том, как мы привыкли доверять свои вещи службам грузоперевозок? Сейчас такие услуги стали неотъемлемой частью нашей жизни, особенно когда речь идет о переездах между …
            d
            dblas5Шілде 5, 2024, 11:02 Т.Ж.
            QML - Сабақ 016. SQLite деректер қоры және онымен QML Qt-та жұмыс істеу Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
            k
            kmssrАқп. 8, 2024, 6:43 Т.Қ.
            Qt Linux - Сабақ 001. Linux астында Autorun Qt қолданбасы как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
            АК
            Анатолий КононенкоАқп. 5, 2024, 1:50 Т.Ж.
            Qt WinAPI - Сабақ 007. Qt ішінде ICMP Ping арқылы жұмыс істеу Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
            Енді форумда талқылаңыз
            Evgenii Legotckoi
            Evgenii LegotckoiМаусым 24, 2024, 3:11 Т.Қ.
            добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
            F
            FynjyШілде 22, 2024, 4:15 Т.Ж.
            при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …
            BlinCT
            BlinCTМаусым 25, 2024, 1 Т.Ж.
            Нарисовать кривую в qml Всем привет. Имеется Лист листов с тосками, точки получаны интерполяцией Лагранжа. Вопрос, как этими точками нарисовать кривую? ChartView отпадает сразу, в qt6.7 появился новый элемент…
            BlinCT
            BlinCTМамыр 5, 2024, 5:46 Т.Ж.
            Написать свой GraphsView Всем привет. В Qt есть давольно старый обьект дял работы с графиками ChartsView и есть в 6.7 новый но очень сырой и со слабым функционалом GraphsView. По этой причине я хочу написать х…
            Evgenii Legotckoi
            Evgenii LegotckoiМамыр 2, 2024, 2:07 Т.Қ.
            Мобильное приложение на C++Qt и бэкенд к нему на Django Rest Framework Добрый день. По моему мнению - да, но то, что будет касаться вызовов к функционалу Андроида, может создать огромные трудности.

            Бізді әлеуметтік желілерде бақылаңыз