Ошибка атрибута: у объекта 'Project' нет атрибута 'getVoteCount'
Я получаю ошибку "'Project' object has no attribute 'getVoteCount'", когда пытаюсь отправить "upvote" в проект (и, следовательно, обновить коэффициент положительных голосов).
Ошибка Exception Location расположена 28 в коде представления, где говорится о 'projectObj.getVoteCount'. Я пробовал играть с этим, но не могу разобраться.
Первый правильный проект, поэтому объясните простыми словами, пожалуйста!
Спасибо!
Models.py:
class Project (models.Model):
owner = models.ForeignKey(
Profile, null=True, blank=True, on_delete=models.CASCADE)
title = models.CharField(max_length=200)
description = RichTextField(null=True,blank=True)
featured_image = models.ImageField(null=True, blank=True, default="default.jpg")
subjective = RichTextField(null=True,blank=True)
differential_diagnosis = RichTextField(null=True,blank=True)
objective = RichTextField(null=True,blank=True)
diagnosis = RichTextField(null=True,blank=True)
treatment = RichTextField(null=True,blank=True)
plan = RichTextField(null=True,blank=True)
references = RichTextField(null=True,blank=True)
tags = models.ManyToManyField('Tag', blank=True)
vote_total =models.IntegerField(default=0, null=True, blank=True)
vote_ratio =models.IntegerField(default=0, null=True, blank=True)
created = models.DateTimeField(auto_now_add=True)
id = models.UUIDField(default=uuid.uuid4, unique=True, primary_key=True, editable=False)
def __str__(self):
return self.title
class Meta:
ordering = ['-vote_ratio', '-vote_total','title']
class Review(models.Model):
VOTE_TYPE = (
('up', 'Up Vote'),
('down', 'Down Vote'),
)
owner = models.ForeignKey(Profile, on_delete=models.CASCADE, null=True)
project = models.ForeignKey(Project, on_delete=models.CASCADE)
body = models.TextField(null=True,blank=True)
value = models.CharField(max_length=200, choices=VOTE_TYPE)
created = models.DateTimeField(auto_now_add=True)
id = models.UUIDField(default=uuid.uuid4, unique=True, primary_key=True, editable=False)
class Meta:
unique_together = [['owner', 'project']]
def __str__(self):
return self.value
@property
def getVoteCount(self):
reviews = self.review_set.all()
upVotes = reviews.filter(value='up').count()
totalVotes = reviews.count()
ratio = (upVotes / totalVotes) * 100
self.vote_total = totalVotes
self.vote_ratio = ratio
self.save()
Views.py:
def project (request, pk):
projectObj = Project.objects.get(id=pk)
form = ReviewForm()
if request.method == 'POST':
form = ReviewForm(request.POST)
review = form.save(commit=False)
review.project = projectObj
review.owner = request.user.profile
review.save()
projectObj.getVoteCount
messages.success(request, 'Your review was successfully submitted!')
return redirect ('project', pk=projectObj.id)
return render(request, 'projects/single-project.html', {'project':projectObj, 'form':form})