Reputation: 21
How to Increment IntegerField on django on button click from template? I have two buttons on template one for like and other for dislike.I am using different post requests for both of them but get no increase on likes and dislikes. I hope Information is complete.
Here is the models.py code
class Post(models.Model):
Title=models.CharField(max_length=50)
slug = models.SlugField(unique=True,null=True,blank=True)
Meta_Tags = models.CharField(max_length=200,null=True)
Description=models.TextField()
Category=models.CharField(max_length=50)
Body=RichTextUploadingField()
Date=models.DateField(auto_now_add=True)
Views=models.IntegerField(default=0,null=True)
Likes=models.IntegerField(default=0,null=True)
Dis_Likes=models.IntegerField(default=0,null=True)
def __str__(self):
return self.Title + " | " + str(self.Date)
here is the view.py code
def blogdetail(request,slug):
post=Post.objects.get(slug=slug)
post.Views +=1
if request.POST.get('Like'):
post.Likes +=1
if request.POST.get('DisLike'):
post.Dis_Likes +=1
post.save()
context={
'post':post
}
return render(request,'blogdetail.html',context)
template code is here
<div class="submit-reaction p-3 mb-5">
<span class="p-x3 mb-5" style="float:left">
<form action="" method="post">
{% csrf_token %}
<button type="submit" name="Like"style="border:none;background:none;"><i
class="far fa-3x fa-thumbs-up text-secondary"></i></button>
</form>
</span>
<span class="p-x3 mb-5" style="float:right">
<form action="" method="post">
{% csrf_token %}
<button type="submit" name="DisLike"style="border:none;background:none;">
<i class="far fa-3x fa-thumbs-down text-secondary"></i></button>
</form>
</span>
</div>
Upvotes: 1
Views: 1230
Reputation: 12558
Use an F()
expression for it
from django.db.models import F
reporter = Reporters.objects.get(name='Tintin')
reporter.stories_filed = F('stories_filed') + 1
reporter.save()
See:
https://docs.djangoproject.com/en/3.2/ref/models/expressions/#f-expressions
Upvotes: 1
Reputation: 7330
The Like
in your template is through form submit button not from form input value
So change like this.
if 'Like' in request.POST:
post.Likes +=1
post.save()
Upvotes: 2