[英]Django: how to join and annotate multiple sql tables?
我正在構建一個示例django應用程序,並且無法正確聚合一些sql結果。
考慮以下三種模型:
電影模特
class Movie(models.Model):
source_id = models.CharField(max_length=100, primary_key=True)
title = models.CharField(max_length=200, validators=[MinLengthValidator(1)])
評分模型
class Rating(models.Model):
movie = models.ForeignKey(Movie, on_delete=models.CASCADE)
rating = models.PositiveIntegerField()
username = models.CharField(max_length=100, validators=[MinLengthValidator(1)])
評論模型
class Comment(models.Model):
movie = models.ForeignKey(Movie, on_delete=models.CASCADE)
username = models.CharField(max_length=100, validators=[MinLengthValidator(1)])
body = models.TextField()
然后考慮以下mysql表:
電影
+-----------+-----------+
| source_id | title |
+-----------+-----------+
| 15sdfsd4 | Spiderman |
+-----------+-----------+
評分
+----+--------+----------+----------+
| id | rating | username | movie_id |
+----+--------+----------+----------+
| 1 | 4 | jack | 15sdfsd4 |
| 2 | 3 | mick | 15sdfsd4 |
+----+--------+----------+----------+
評論
+----+----------+--------------------+----------+
| id | username | body | movie_id |
+----+----------+--------------------+----------+
| 1 | charles | I loved this movie | 15sdfsd4 |
| 2 | mick | Nice sound fx | 15sdfsd4 |
+----+----------+--------------------+----------+
我想查詢電影ID的列表,並獲取平均評級和評論的nr的摘要。
我嘗試了類似的東西
ids = ['15sdfsd4','54fdf5d']
m = Movie.objects.filter(source_id__in=ids).annotate(Avg('rating'), Count('comment'))
我希望ID為15sdfsd4的電影的評論計數為2,平均評級為3.5。 取而代之的是,我得到4的評論數和1.5的平均評分,這對我來說意義不大...
你有什么建議嗎? 謝謝
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.