現在、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)