请考虑以下模型:
class Employee(models.Model):
name = models.Charfield(max_length=100)
class Evaluation(models.Model):
employee = models.ForeignKeyField(Employee, on_delete=models.CASCADE)
question1 = models.PositiveIntegerField(default=0)
question2 = models.PositiveIntegerField(default=0)
我们的 idea 是,对一名员工进行审查,我们 for each 问题记录分数.
我可以通过执行以下操作来获得员工判断的总分:
models.Evaluation.objects.annotate(score=F(question1) + F(question2))
这很好,100
我从以下几个方面开始:
score_subquery = models.Evaluation.objects.annotate(score=F(question1) + F(question2)).filter(employee_id=OuterRef('pk').values('score')
models.Employee.objects.annotate(avg_score=Avg(Subquery(score_subquery)))
在对一名员工进行多个判断之前,这种方法运行良好,在这种情况下,我们得到:
more than one row returned by a subquery used as an expression
所以我做了一些调查,发现了ArraySubquery
然而,不幸的是,这是:
score_subquery = models.Evaluation.objects.annotate(score=F(question1) + F(question2)).filter(employee_id=OuterRef('pk').values('score')
models.Employee.objects.annotate(avg_score=Avg(ArraySubquery(score_subquery)))
崩溃的原因:
function avg(integer[]) does not exist
我假设我已经达到了波斯格雷斯的限制?
我知道我可以通过使用真实的字段来存储分数来解决这个问题,但我只是好奇是否可以严格使用注释来做到这一点?