【发布时间】:2018-09-10 06:13:40
【问题描述】:
我有以下模型,我想要选择一个业务集合,每个业务都有一个基于 group by review_question_id 的 AVG(rate) 集合。
以下是必要的模型:
class ReviewQuestion(models.Model):
"""Represents a question to be given in a business type
"""
business_type = models.ForeignKey(BusinessType, on_delete=models.CASCADE)
question_text = models.CharField(max_length=100)
class Business(models.Model):
"""Values for a specific business, based on a type
will inherit questions and reviews
"""
business_type = models.ForeignKey(BusinessType, on_delete=models.CASCADE)
name = models.CharField(max_length=100)
class CustomerReview(models.Model):
"""Rate value by customers on a specific quesiton
for a specific business
"""
business = models.ForeignKey(Business, on_delete=models.CASCADE)
review_question = models.ForeignKey(
ReviewQuestion, on_delete=models.CASCADE)
review_value = models.PositiveSmallIntegerField()
我试图接近的最近的查询:
items = Business.objects.filter(business_type_id=type_id).values(
'id', 'name', 'business_type_id', 'address', 'customerreview__review_question_id').annotate(rate=Avg('customerreview__review_value'))
它的问题是重复。它复制了整个列表,结果是扁平的,就像你用扁平 tsql 编写它时得到的一样。
理想的结果应该是这样的:
[
{
"business_id": 1,
"business_name": "something",
"rating":[
{
"Question_1":{
"title":"ReviewQuestion__question_text",
"Avg":5.0
},
"Question_2":{
"title":"ReviewQuestion__question_text",
"Avg":5.0
},{
...
}
}
]
}
]
如果我是 python/django 的新手,我将不胜感激。
【问题讨论】:
标签: python django python-3.x django-queryset django-orm