0

現在、select_related を使用して最適化したい次のコードがあります。目的は、is_active = True の Voucher が少なくとも 1 つある BaseReward のセットを見つけることです。

    class Basereward(models.Model):
        active = models.BooleanField()

    class Voucher(models.Model):
        reward = models.ForeignKey(BaseReward, related_name='reward_vouchers')
        is_active = models.BooleanField()

意見

    qs = BaseReward.objects.filter(active=True).all()
    for reward in qs:
        if not reward.reward_vouchers.filter(is_active=True).all():
            qs = qs.exclude(id=reward.id)
    return qs

それを行う正しい方法は何ですか?逆の関係を使用してselect_relatedを使用することを考えていましたが、ドキュメントはそれが機能しないと言っています他の方法はありますか?

    qs = BaseReward.objects.filter(active=True).all().select_related(reward_vouchers)
4

1 に答える 1

1

BaseReward逆に、少なくとも 1 つあるオブジェクトの一意のセットを取得しVoucherます。

Voucher.objects.filter(is_active=True).distinct(reward)
于 2014-09-20T15:36:44.830 に答える