簡體   English   中英

如何將平均評分顯示為星級?

[英]how can I display the average rating as stars?

我正在開發我的 web 應用程序,我想向醫生顯示平均評分,但是當我嘗試使用 avg 並在我的 model 中創建一個 function 時,它只顯示了最后的評分,而不是平均評分

這是我的 model

class Doctor(models.Model):
    user = models.OneToOneField(
        User, on_delete=models.CASCADE, primary_key=True)
    number_phone = models.CharField(
        _('االهاتف :'), max_length=50, blank=True, null=True)

  def averagreview(self):

        reviews = Comments.objects.filter(
            doctor=self).aggregate(average=Avg('rating'))
       
        avg = 0
        if reviews["average"] is not None:
            avg = float(reviews["average"])
            return avg

    def countreviews(self):
        reviews = Comments.objects.filter(
            doctor=self).aggregate(count=Count('id'))
        cnt = 0
        if reviews["count"] is not None:
            cnt = int(reviews["count"])
        return cnt

this the Comments model 

class Comments(models.Model):
    doctor = models.ForeignKey(
        Doctor, on_delete=models.CASCADE,   related_name='comment')
    created_by = models.ForeignKey(
        User, on_delete=models.CASCADE, related_name='comments')
    # co_email = models.ForeignKey(
    #     User, on_delete=models.CASCADE, related_name='comment')
    review = models.TextField(max_length=400, verbose_name='التعليق')
    rating = models.IntegerField(default=0)

這是我的 HTML


<div class="rating">
                                    <div class="text">
                                        <span class="rating-star">
                                            <i class="fa fa-star{% if doctor.averagreview < 1%}-o empty checked{% endif %}"
                                                aria-hidden="true"></i>
                                            <i class="fa fa-star{% if doctor.averagreview < 2%}-o empty checked {% endif %}"
                                                aria-hidden="true"></i>
                                            <i class="fa fa-star{% if doctor.averagreview < 3%}-o empty checked{% endif %}"
                                                aria-hidden="true"></i>
                                            <i class="fa fa-star{% if doctor.averagreview < 4%}-o empty checked{% endif %}"
                                                aria-hidden="true"></i>
                                            <i class="fa fa-star{% if doctor.averagreview < 5%}-o empty checked{% endif %}"
                                                aria-hidden="true"></i>
                                        </span>

                                        </span>
                                    </div>

我不知道為什么它顯示最后的匯率不是平均水平我是否犯了錯誤如果有解決方案請寫下來並解釋

我認為問題在於您正在使用像annotate這樣的aggregate ,也就是說您正在定義一個不需要定義參數的參數。 試試這個:

reviews = Comments.objects.filter(doctor=self).aggregate(Avg('rating'))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM