Я новичок в django, и я пытаюсь создать подобную жопу. Когда я нажимаю на кнопку, я вижу, что модель Like обновляется вместе с пользователем и публикацией, которая ему понравилась. Затем я также вижу, что общее количество лайков в модели Post увеличивается на 1. Но сам шаблон по-прежнему показывает 0 лайков.
class Post(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL,
on_delete=models.CASCADE)
title = models.CharField(max_length=255)
description = models.CharField(max_length=255)
content = models.TextField()
created_date = models.DateTimeField(default=timezone.now)
published_date = models.DateTimeField(blank=True, null=True)
categorys = models.ManyToManyField('Category')
tags = models.ManyToManyField('Tag')
likes = models.IntegerField(default=0)
slug = models.SlugField(max_length=100, unique=True)
image = models.ImageField(null=True, upload_to=post_image_file_path)
'' '
class Like(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL,
on_delete=models.CASCADE)
post = models.ForeignKey('Post', on_delete=models.CASCADE)
created = models.DateTimeField(default=timezone.now)
'' '
path('', views.home_view, name='home'),
path('like/', views.like, name='like'),
'' '
def home_view(request, *args, **kwargs):
all_posts = services.get_all_posts()
all_categorys = services.get_all_categorys()
all_tags = services.get_all_tags()
context = {'all_posts': all_posts, 'all_categorys': all_categorys,
'all_tags': all_tags}
return render(request, 'blog/home.html', context)
def like(request, *args, **kwargs):
if request.method == 'GET':
model = get_user_model()
postid = request.GET.get('postid')
user = model.objects.get(id=request.user.id)
post = Post.objects.get(id=postid)
if Like.objects.filter(user=user, post=post).exists():
Like.objects.filter(user=user, post=post).delete()
update_likes = Post.objects.get(id=post.id)
update_likes.likes -= 1 # change field
update_likes.save() # this will update only
else:
like = Like.objects.create(user=user, post=post)
update_likes = Post.objects.get(id=post.id)
update_likes.likes += 1 # change field
update_likes.save() # this will update only
return redirect('blog:home')
'' '
{% for post in all_posts %}
html...
<form action="{% url 'blog:like'%}" method="GET">
<input type="hidden" name="postid" value="{{ post.id }}">
<button type="submit" class="btn btn-success">Like</button>
</form>
<p>total = {{ post.likes }}</p>
{% endfor %}
'' '
Я уверен, что это не лучший способ сделать это, но мне нравится понимать, почему шаблон не обновляется с новым значением после перенаправления в домашний вид.