我目前有以下代码,我想使用select_related进行优化。目的是找出至少有一个凭证的BaseReward集合,其中is_active = True
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)
答案 0 :(得分:1)
反过来说,为至少有一个BaseReward
获取唯一的Voucher
个对象:
Voucher.objects.filter(is_active=True).distinct(reward)