2010-05-20 47 views
0

我有一堆Users。由於Django並不真的讓我擴展默認的User模型,它們每個都有Profiles。配置文件有一個referred_by字段(FK到用戶)。我正在嘗試獲取具有> = 1個引薦的用戶列表。這裏就是我有這麼遠通過推介選擇不同的用戶

Profile.objects.filter(referred_by__isnull=False).values_list('referred_by', flat=True) 

這給了我誰擁有下線的用戶的ID列表...但我需要它是不同,我想User對象,而不是他們的ID。

或者更好的是,它會很好,如果它可以返回用戶擁有的推薦人數。

任何想法?

+0

您的查詢集是不同的,你可以簡單地使用.distinct():http://docs.djangoproject.com/en/dev/ref/models/querysets/#distinct – vitorbal 2010-05-20 23:02:40

+0

@vitorbal:我知道'distinct( )''但只有'referenced_by'字段需要不同。這沒有幫助。 – mpen 2010-05-20 23:14:55

回答

1

我花了很長的時間來總結我解決這個的頭,但我想,我終於想通了:

affiliates = User.objects.annotate(num_referrals=Count('referrals')).filter(num_referrals__gt=0) 

我不認爲我可以使用反向關係

referred_by = models.ForeignKey(User, null=True, blank=True, related_name='referrals') 

Count(),我也不認爲你可以在過濾器中使用註釋值...這很酷。我仍然希望你可以使用GROUP BY,而不必註解東西(假設我不需要計數)。