2010-05-28 2 views
0

나는이더 엄격한 쿼리를 사용하면 더 많은 결과를 얻을 수 있습니까?

affiliates = User.objects.annotate(referral_count=Count('referrals')) 
         .filter(referral_count__gt=0) 

과 같은 쿼리를 가지고있다하지만 더 필터에 referrals__user__date_joined__gt=start_date을 추가하여 제한 할 때, 나는 더 높은 조회 수를 얻을.

나는 사용자가 기간 내에 언급 한 사람들의 수를 계산하기 위해 노력하고있어.

는 관련 모델은 다음과 같습니다 대조적으로

class Profile(models.Model): 
    user = models.ForeignKey(User, unique=True, related_name='profile') 
    referred_by = models.ForeignKey(User, null=True, blank=True, 
     related_name='referrals') 

, 나는이처럼하려고하면

affiliates = User.objects \ 
    .exclude(referrals__user__date_joined__lte=sd, \ 
     referrals__user__date_joined__gt=ed) \ 
    .annotate(referral_count=Count('referrals')) \ 
    .filter(referral_count__gt=0) 

exclude 문은 아무것도하지 않는 것 같다 ... 카운트는하지 않습니다 변경 (참조 된 사용자가 해당 기간 내에 참여하지 않았 으면 0이어야하지만 그렇지 않은 경우).

답변

0

이것은 작동하는 것 같다.

1

나는 완전히 잘 모르겠지만, 어쩌면 당신은 당신의 질의에 referred_by에 의해 referrals를 교체 시도 할 수 있습니다. 비슷한 쿼리를 실행하려고하면 오류가 발생합니다. referrals은 관리자이고 referred_by은 필드의 이름이므로 더 논리적 인 쿼리입니다. 이미 추천없이 모든 사용자를 반환하지 않습니다 때문에

new_users = User.objects.filter(date_joined__gt=sd, date_joined__lte=ed) 
new_referrals = User.objects.filter(referrals__user__in=new_users).annotate(referral_count=Count('referrals')).select_related('profile') 

클수록 0보다 검사가 필요하지 않습니다 :

+0

'사용자'는'referenced_by' 필드가 없습니다. 그것은'Profile' 객체에 있습니다. 'related_name' ('referrals')은'User' 객체에 나타나는 것입니다. 그래서 나는 그것을 사용해야합니다. – mpen

+0

예,하지만 시도 만 했습니까? – sebpiq

관련 문제