【发布时间】:2015-08-11 21:03:44
【问题描述】:
我有下一条 Django 语句
def get_companies_with_average_ratings_data(self, city=None, faculty=None):
companies = Company.objects.values('name', 'id', 'logo_image').annotate(
recommendations_score=Avg('companyinternshipreview__recommendation')
).annotate(
apply_skills_score=Avg('companyinternshipreview__apply_skills')
).annotate(
learn_new_score=Avg('companyinternshipreview__learn_new')
).order_by('-recommendations_score', '-apply_skills_score', '-learn_new_score')
if city:
companies = companies.filter(cities__name=city)
if faculty:
companies = companies.filter(companyinternshipreview__user__student__faculty__name=faculty)
return companies
并非所有公司都添加了带有评级的评论,因此对于某些结果,聚合字段将包含 NULL,这会导致排序中断。我首先看到没有评级的公司,而且只有在这些公司按评级排序之后。
我正在使用 PostgreSQL,如果不存在评论,我想使用“COALESCE”返回平均值或 0。如何以 Django ORM 方式将此“COALESCE”传递给 Django 模型查询?我不想使用原始 SQL。
【问题讨论】:
标签: python django postgresql django-models