MU
July 21, 2020, 6:12 p.m.

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
The question is asked by the articleDjango - Tutorial 023. Like Dislike system using GenericForeignKey

Do you like it? Share on social networks!

2
Evgenii Legotckoi
  • July 22, 2020, 2:09 a.m.
  • The answer was marked as a solution.

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
    • July 25, 2020, 7:47 p.m.

    Thank you! This is it. :)

      Comments

      Only authorized users can post comments.
      Please, Log in or Sign up
      • Last comments
      • AK
        April 1, 2025, 11:41 a.m.
        Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
      • Evgenii Legotckoi
        March 9, 2025, 9:02 p.m.
        К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
      • VP
        March 9, 2025, 4:14 p.m.
        Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…
      • ИМ
        Nov. 22, 2024, 9:51 p.m.
        Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
      • Evgenii Legotckoi
        Oct. 31, 2024, 11:37 p.m.
        Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup