MU
21 июля 2020 г. 18:12

Change likedislike app to reaction app

django, Django

Hi, I create app following the tutorial on evileg, but I do some changes.

My code:

  1. class LikeDislikeManager(models.Manager):
  2. use_for_related_fields = True
  3.  
  4. def likes(self):
  5. # We take the queryset with records greater than 0
  6. return self.get_queryset().filter(vote__gt=0)
  7.  
  8. def dislikes(self):
  9. # We take the queryset with records less than 0
  10. return self.get_queryset().filter(vote__lt=0)
  11.  
  12. def sum_rating(self):
  13. # We take the total rating
  14. return self.get_queryset().aggregate(Sum('vote')).get('vote__sum') or 0
  15.  
  16. class LikeDislike(models.Model, Activity):
  17. LIKE = 1
  18. POWER = 1
  19. WOW = 1
  20. SUCCESS = 1
  21. BLOW = 1
  22.  
  23. VOTES = (
  24. (LIKE, 'Polubienie'),
  25. (POWER, 'Jest moc!'),
  26. (WOW, 'Wow'),
  27. (SUCCESS, 'Świetnie!'),
  28. (BLOW, 'Mózg rozwalony!'),
  29. )
  30.  
  31. vote = models.SmallIntegerField(verbose_name='Like', choices=VOTES)
  32. user = models.ForeignKey(User, verbose_name='Użytkownik polubił', on_delete=models.CASCADE)
  33. created_at = models.DateTimeField(auto_now_add=True)
  34.  
  35. content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
  36. object_id = models.PositiveIntegerField()
  37. content_object = GenericForeignKey()
  38.  
  39. objects = LikeDislikeManager()
  40.  
  41. @property
  42. def activity_actor_attr(self):
  43. return self.user

I don't change views.py and almost everything works fine but reaction count. I don't know how to count particural reaction. Any idea? :)

2
Вопрос задан по статьеDjango - Урок 023. Like Dislike система с помощью GenericForeignKey

Вам это нравится? Поделитесь в социальных сетях!

2
Evgenii Legotckoi
  • 22 июля 2020 г. 2:09
  • Ответ был помечен как решение.

Hello,

In my tutorial I use +1 and -1 for Like and Dislike, because of it is very easy to get total sum, like rating. But you have different idea of reaction. You can not use +1 and -1 and make sum of these reaction.

But you can set up different types of reactions like this

  1. LIKE = 1
  2. POWER = 2
  3. WOW = 3
  4. SUCCESS = 4
  5. BLOW = 5

And you need to write the following manager

  1. class LikeDislikeManager(models.Manager):
  2. use_for_related_fields = True
  3.  
  4. def likes(self):
  5. return self.get_queryset().filter(vote=1)
  6.  
  7. def powers(self):
  8. return self.get_queryset().filter(vote=2)
  9.  
  10. def wows(self):
  11. return self.get_queryset().filter(vote=2)
  12.  
  13. def successes(self):
  14. return self.get_queryset().filter(vote=2)
  15.  
  16. def blows(self):
  17. return self.get_queryset().filter(vote=2)

But in this conception you don't use sum_rating . I think it is useless

    MU
    • 25 июля 2020 г. 19:47

    Thank you! This is it. :)

      Комментарии

      Только авторизованные пользователи могут публиковать комментарии.
      Пожалуйста, авторизуйтесь или зарегистрируйтесь
      • Последние комментарии
      • Evgenii Legotckoi
        16 апреля 2025 г. 17:08
        Благодарю за отзыв. И вам желаю всяческих успехов!
      • IscanderChe
        12 апреля 2025 г. 17:12
        Добрый день. Спасибо Вам за этот проект и отдельно за ответы на форуме, которые мне очень помогли в некоммерческих пет-проектах. Профессиональным программистом я так и не стал, но узнал мно…
      • AK
        1 апреля 2025 г. 11:41
        Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
      • Evgenii Legotckoi
        9 марта 2025 г. 21:02
        К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
      • VP
        9 марта 2025 г. 16:14
        Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…