我目前有以下代码,我想使用 select_related 进行优化。目的是找出至少有一个 is_active = True 的 Voucher 的 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)