2017-05-15 4 views
0

Django 1.11の使用。別のモデルのフィールド値の出現の注釈

​​

私は、1つのまたは2つのDBリクエストでこのないというクエリセットを必要とする:これらは私のモデルです

promocodes = PromoCode.objects.all() 
for p in promocodes: 
    p.assigned_times = UserPromoCode.objects.filter(promo_code__code=p.code).count() 

事がPromoCode.codeが一意ではないということですので、私が行うことはできません私はそれがPromoCode.objects.annontateのようなもの(assigned_times =(???)カウント)する必要があります推測

promocodes = PromoCode.objects.all() 
for p in promocodes: 
    p.assigned_times = p.user_promo_code.count() 

:のアナログであるPromoCode.objects.annontate(assigned_times=Count('user_promo_code'))

答えて

0

私はそれを働かせました。

from django.db.models import OuterRef, Subquery 
from django.db.models.functions import Coalesce 

user_promo_codes = UserPromoCode.objects.filter(promo_code__code=OuterRef('code')).values('promo_code__code') 
user_promocode_counts = upks.annotate(c=Count('*')).values('c') 

PromoCode.objects.annotate(assigned_times=Coalesce(Subquery(user_promocode_counts), 0) 

user_promocode_countsにはゼロではなくNonesがあるため、Coalesceが使用されます。

関連する問題