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 クエリを 1 つ実行できます。

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 集計と注釈関数を使用してこの結果を取得したいと思いますが、ドキュメントを読んだ後、関連するオブジェクトのフィールドに基づいて集計することはできないと思いますが、場合によっては質問したかったのです何かを逃した。

4

1 に答える 1

0

これはどう:

Office.objects.filter(
    staff__appointment__result='success'
).values('name').annotate(appointments=models.Count('staff__appointment'))
于 2012-05-03T22:31:16.770 に答える