我正在尝试计算与标准匹配的对象,并按相关对象的特征进行分组。例如,如果我有一组这样的模型:
class Office(User):
name = models.CharField(max_length=50)
city = models.CharField(max_length=50)
class Staff(User):
home_office = models.ForeignKey(Office)
class Appointment(models.Model):
appt_start = models.DateTimeField()
appt_end = models.DateTimeField()
client = models.ForeignKey(User)
provider = models.ForeignKey(Staff)
result = models.CharField(max_length=50)
而且我想获得导致每个办公室“成功”的约会数量,我可以像这样执行一个原始 SQL 查询:
SELECT office.name, COUNT(appointment.id)
FROM appointment
JOIN staff ON staff.id = appointment.provider_id
JOIN office ON office.id = staff.home_office_id
WHERE appointment.result = 'success' GROUP BY office.name;
如果可能的话,我更愿意使用 ORM 和 Django 的 QuerySet 聚合和注释函数来获得这个结果,但是在阅读了文档之后,我认为不可能根据相关对象的字段进行聚合,但我想问一下以防万一会错过一些东西。