Как отобразить средние оценки в виде звезд в django
Я хочу отобразить среднюю оценку продукта в виде звезд, где я хочу иметь 5 звезд, а затем заполнить звезды золотым цветом в зависимости от того, насколько велика средняя оценка продукта.
Вот мой код и отношение между моделями
class Product(models.Model):
name = models.CharField(max_length=300)
price = models.DecimalField(max_digits=7, decimal_places=2)
image_url = models.CharField(max_length=400)
digital = models.BooleanField(blank=False)
sizes = models.ManyToManyField(Size, through='ProductSize')
quantity = models.IntegerField(default=1)
def __str__(self):
return self.name
@property
def get_average_rating(self):
average = self.comment_set.aggregate(Avg('rating'))['rating__avg']
if average is not None:
return round(average, 1)
else:
return 0
class Comment(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
product = models.ForeignKey(Product, on_delete=models.CASCADE)
text = models.TextField()
image = models.ImageField(upload_to='images/comment_images', null=True, blank=True)
created_on = models.DateField(auto_now_add=True)
rating = models.IntegerField(default=0, validators=[MinValueValidator(0), MaxValueValidator(5)])
Я пытался запустить такой цикл, но он не сработал, так как средний рейтинг находится в float
Я не знаю много javascript, так что если вы можете помочь мне в js, это будет оценено также спасибо!!!
{% for _ in product.get_average_rating %}
★
{% endfor %}
Рендеринг в модели:
class Product(models.Model):
name = models.CharField(max_length=300)
price = models.DecimalField(max_digits=7, decimal_places=2)
image_url = models.CharField(max_length=400)
digital = models.BooleanField(blank=False)
sizes = models.ManyToManyField(Size, through='ProductSize')
quantity = models.IntegerField(default=1)
def __str__(self):
return self.name
@property
def average_rating(self):
return round(
self.comment_set.aggregate(Avg('rating'))['rating__avg'] or 0, 1
)
@property
def star_rating(self):
return '★' * self.average_rating
и визуализировать с помощью:
{{ product.star_rating }}