Reputation: 11741
I am calling my models(Answer
) function isupvoted
from template while iterating over all answers that are being shown on page to see if the loggedin user has liked the iterating answer. My Answer
and Upvote
models are as below.
class Answer(models.Model):
answer_text = models.TextField(max_length=5000)
answer_author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='ans_auth')
question = models.ForeignKey(Question, on_delete=models.CASCADE)
a_pub_date = models.DateTimeField('Date Answer Published')
a_modified_date = models.DateTimeField('Date Answer Modified', null=True, blank=True)
def __str__(self):
return self.answer_text
def isupvoted(self, request):
counter = UpvoteAnswerMod.objects.filter(answer=self, upvote_user=request.user).count()
print("upvote count: "+counter)
return counter
class UpvoteAnswerMod(models.Model):
answer = models.ForeignKey(Answer, on_delete=models.CASCADE)
upvote_user = models.ForeignKey(User, on_delete=models.CASCADE)
upvote_date = models.DateTimeField('Date Upvoted')
I am calling the function as below
{% if answer.isupvoted == 1 %}
<a class="upvote pressed" href="#" >Downvote</a>
{% else %}
<a class="upvote" href="#" >Upvote</a>
{% endif %}
But answer.isupvoted
is not returning anything. How do I get the upvote count?
Upvotes: 1
Views: 88
Reputation: 3506
In your model, use @property
:
@property
def isupvoted(self, user):
try:
counter = UpvoteAnswerMod.objects.filter(answer=self,
upvote_user=user).count()
print("upvote count: "+counter)
return counter
except ObjectDoesNotExist as e:
print("Not Found - {}".format(e))
return 0
Upvotes: 1