Счетчик Like/Dislike не добавляется/удаляется после щелчка в проекте Django
Это проект типа социальной сети (Django/Python), и когда я нажимаю на кнопку Like/Dislike, она не регистрирует Like или Dislike. Не получаю ошибку, просто ничего не происходит. Код ниже - заранее спасибо!
Вот весь код в моем views.py
from django.shortcuts import render
from django.http import HttpResponseRedirect
from .forms import PostForm
from django.views.generic import ListView, CreateView, UpdateView, DeleteView
from django.views import View
from main_app.models import Post
class PostList(ListView):
def get(self, request, *args, **kwargs):
posts = Post.objects.all()
form = PostForm()
return render(request, 'main_app/post_list.html', {'post_list': posts})
def post(self, request, *args, **kwargs):
posts = Post.objects.all()
form = PostForm(request.POST)
if form.is_valid():
new_post = form.save(commit=False)
new_post.author = request.user
new_post.save()
return render(request, 'main_app/post_list.html', {'post_list': posts})
class PostCreate(CreateView):
model = Post
fields = '__all__'
success_url = '/posts/'
class PostUpdate(UpdateView):
model = Post
fields = ['text']
success_url = '/posts/'
class PostDelete(DeleteView):
model = Post
success_url = '/posts/'
def show(request, post_id):
post = Post.objects.get(id=post_id)
return render(request, 'show.html', {'post': post})
class AddLike(View):
def post(self, request, pk, *args, **kwargs):
post = Post.objects.get(pk=pk)
is_dislike = False
for dislike in post.dislike.all():
if dislike == request.user.id:
is_dislike = True
break
if is_dislike:
post.dislike.remove(request.user)
is_like = False
for like in post.like.all():
if like == request.user:
is_like = True
break
if not is_like:
post.like.add(request.user.id)
if is_like:
post.like.remove(request.user.id)
next = request.POST.get('next', '/')
return HttpResponseRedirect(next)
class AddDislike(View):
def post(self, request, pk, *args, **kwargs):
post = Post.objects.get(pk=pk)
is_like = False
for like in post.like.all():
if like == request.user:
is_like = True
break
if is_like:
post.like.remove(request.user.id)
is_dislike = False
for dislike in post.dislike.all():
if dislike == request.user:
is_dislike = True
break
if not is_dislike:
post.dislike.add(request.user.id)
if is_dislike:
post.dislike.remove(request.user.id)
next = request.POST.get('next', '/')
return HttpResponseRedirect(next)
Вот весь код в моем models.py
from django.db import models
from django.contrib.auth.models import User
class Post(models.Model):
text = models.TextField()
like = models.ManyToManyField(User, blank=True, related_name='like')
dislike = models.ManyToManyField(User, blank=True, related_name='dislike')
def __str__(self):
return f"text: {self.text}"
Вот весь код в моем post_list.html
{% extends 'base.html' %} {% block title %} All Posts!!!!!! {% endblock %}
{%block content %}
<h1>All Posts!!</h1>
<hr />
{% for post in post_list %}
<div class="card">
<a href="/posts/{{ post.id }}">
<div class="card-content">
<!-- <span class="card-title">{{ post.text }}</span> -->
<p>{{ post.text }}</p>
<div class="d-flex flex-row">
<form method="POST" action="{% url 'like' post.pk %}">
{% csrf_token %}
<input type="hidden" name="next" value="{{ request.path }}" />
<button type="submit">
like
<span>{{ post.like.all.count }}</span>
</button>
</form>
<form method="POST" action="{% url 'dislike' post.pk %}">
{% csrf_token %}
<input type="hidden" name="next" value="{{ request.path }}" />
<button type="submit">
dislike
<span>{{ post.dislike.all.count }}</span>
</button>
</form>
</div>
</div>
</a>
</div>
{% endfor %} {% endblock %}