2010-05-28 43 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

這似乎工作:

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檢查是沒有必要的,因爲它已經不推薦沒有任何回報用戶。

1

我不完全確定,但也許你可以在你的查詢中嘗試用referred_by代替referrals。 當我嘗試執行類似於你的查詢時,它甚至會引發錯誤。 referrals是一個經理,而referred_by是一個字段的名稱,因此在查詢中更具邏輯性。

+0

'用戶'沒有'referenced_by'字段;在'Profile'對象上。 'related_name'('referrals')是出現在'User'對象上的,這就是爲什麼我必須使用它。 – mpen 2010-05-29 01:56:36

+0

是的,但你只試過? – sebpiq 2010-05-29 10:01:16

相關問題