Поставьте DISLIKE, удалив LIKE. Django

Возможно, кто-то сможет помочь. Есть проект Django, в котором я пытаюсь добавить функцию LIKE / DISLIKE. Я понял, как добавить или удалить LIKE / DISLIKE. Но в моей логике есть брешь в том, что пользователь может поставить как LIKE, так и DISLIKE (это не совсем корректно). Поэтому я хочу сделать "финт ушами" следующим образом: если пользователь ставит LIKE, потом передумывает и ставит DISLIKE, то добавляется DISLIKE, а LIKE автоматически отменяется (как это происходит на YouTube).

У меня следующие взгляды:

  1. class AddLikeView (View)
  2. class RemoveLikeView (View)
  3. class AddDisLikeView (View)
  4. class RemoveDisLikeView (View)

Насколько я понимаю, мне нужно написать какую-то логику в AddDisLikeView и RemoveLikeView. Подскажите пожалуйста.

class AddDisLikeView(View):
def post(self, request, *args, **kwargs):
    blog_post_id = int(request.POST.get('blog_post_id'))
    user_id = int(request.POST.get('user_id'))
    url_from = request.POST.get('url_from')

    user_inst = User.objects.get(id=user_id)
    blog_post_inst = News.objects.get(id=blog_post_id)

    try:
        blog_dislike_inst = BlogDisLikes.objects.get(blog_post=blog_post_inst, liked_by=user_inst)
    except Exception as e:
        blog_dislike = BlogDisLikes(blog_post=blog_post_inst,
                              disliked_by=user_inst,
                              dislike=True)
        blog_dislike.save()
    return redirect(url_from)


class RemoveLikeView(View):
def post(self, request, *args, **kwargs):
    blog_likes_id = int(request.POST.get('blog_likes_id'))
    url_from = request.POST.get('url_from')

    blog_like = BlogLikes.objects.get(id=blog_likes_id)
    blog_like.delete()
    return redirect(url_from)
Вернуться на верх