0

我目前有以下代码,我想使用 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)
4

1 回答 1

1

反过来做,获取BaseReward至少有一个对象的唯一对象集Voucher

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