0
我目前有以下代码,我想使用select_related进行优化。其目的是要找出一套BaseReward对其中至少有一个用券= IS_ACTIVE真正确使用select_related
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)
谢谢你,其实我需要的最终查询集返回(QS)成为BaseReward对象的列表。目前你放的东西会给我优惠券物品。我应该在最后添加它:Voucher.objects.filter(is_active = True).distinct(reward).reward.all()? – dowjones123 2014-09-20 15:38:52
所有'Voucher'对象都有'voucher.reward'对象,它代表该凭证的'BaseReward'对象;更不用说你写的'distinct(reward).reward.all()'是无效的;如果你想要的只是奖励对象,请尝试'distinct('reward')。values('reward')',参见['values']的文档(https://docs.djangoproject.com/en/1.4/ ref/models/querysets /#values)以获取更多信息。 – 2014-09-20 16:31:08
感谢Burhan。我尝试了不同的('奖励')。价值('奖励'),并且它给了我:['reward':3},{'reward':4},{'reward':5},{'reward': 6},{'reward':7},{'reward':8},{'reward':11}] 我在找的是一个带有BaseReward对象的查询集,因为我在一个REST框架的get_queryset()方法Viewset – dowjones123 2014-09-20 21:06:59