2012-05-03 18 views
0

関連するオブジェクトの特性によって基準とグループに一致するオブジェクトを数えようとしています。私はこのようなモデルのセットがある場合たとえば、:フィルタリングされた関連オブジェクトの集約

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のクエリセット集約&注釈機能を使用して、この結果を得ることを好むだろうと私はそれが関連するオブジェクトのフィールドに基づいて集約することはできないと思うけど私は何かを逃した場合に備えて尋ねたがっていました。

答えて

0

これはどう:

Office.objects.filter(
    staff__appointment__result='success' 
).values('name').annotate(appointments=models.Count('staff__appointment')) 
関連する問題