S.D*_*S.D 2 python django django-models
我在 Django 中有一个像这样的书籍模型和评论模型:
class Book(models.Model):
ratings = models.FloatField()
class Review(models.Model):
book = models.ForeignKey(
Book,
on_delete=models.CASCADE,
related_name='reviews',
)
review = models.CharField(max_length=5000)
score = models.PositiveSmallIntegerField(null=True, blank=True,
validators=[MinValueValidator(0), MaxValueValidator(10)])
Run Code Online (Sandbox Code Playgroud)
如何在 Book 中创建一种方法来计算评分(这是与特定书籍相关的所有评论的平均值)?
您可以实现如下属性:
from django.db.models import Avg
class Book(models.Model):
@property
def ratings(self):
return self.reviews.aggregate(avg_score=Avg('score'))['avg_score']Run Code Online (Sandbox Code Playgroud)
或者,如果您需要批量执行此操作,您可以注释您的查询集:
from django.db.models import Avg
Book.objects.annotate(
avg_rating=Avg('reviews__score')
)Run Code Online (Sandbox Code Playgroud)
Book从此查询集产生的对象将有一个额外的属性avg_rating,其中包含score相关Reviews的平均值。
| 归档时间: |
|
| 查看次数: |
302 次 |
| 最近记录: |