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