2

私は次のような2つのモデルを持っています:

class Company(models.Model):
    raising = models.DecimalField()

class Investment(models.Model):
    company = models.ForeignKey(Company)
    amount  = models.DecimalField()

、累積投資額が以下のすべての企業を見つけたいraising

投資額を集計する Company という名前の動的プロパティを追加するとraised_so_far、次のようになります。

Company.objects.filter(raised_so_far__lt=F('raising'))

ただし、フィルタリングは SQL レベルで行われるため、それは不可能です。

これまでのところ、これは私の最善の試みです:

Company.objects.filter(raising__gt=Investment.objects.filter(company=F(outer_company_object)).aggregate(Sum('amount'))['amount__sum'] or 0)

親オブジェクトを使用して外部キーの集計をフィルタリングするにはどうすればよいですか?

4

1 に答える 1

1

Fクエリセットに総投資 (結合によって処理) で注釈を付けてから、オブジェクトを使用してクエリを実行し、注釈付きの値をフィールドのように使用するだけです。

Company.objects.annotate(total_investments=models.Sum('investments__amount')).filter(raising__gt=models.F('total_investments'))

そして、あなたは昇給に向かっています。

于 2013-07-09T17:36:22.190 に答える