我想以星星的形式显示产品的平均评分,我想要 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)])
我尝试运行这样的循环,但它不起作用,因为平均评分是浮动的
我不太了解 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
并渲染:
{{ 产品.star_ rating }}