2012-04-12 69 views
0

如果我得到這樣附加的特定對象(但同一類型)的過濾的對象在Django

special_user_list = User.objects.filter(userprofile__user_type = 'special') 

User對象的列表,我怎麼還附上request.user(登錄的用戶的電流),這也是User

我知道我大概可以這樣做

special_user_list = User.objects.filter(
    Q(userprofile__user_type = 'special') | 
    Q(pk = request.user.pk) 
) 

,但我不知道上面的代碼可以雙擊包括request.user(如果request.user.get_profile().user_type = 'special'爲好)。另外,我想避免使用複雜的SQL語句來添加用戶,因爲我已經知道該用戶的身份。

回答

2

對於數據庫來說,它比使用Python更便宜。

special_user_list = User.objects.filter(
    Q(userprofile__user_type='special') | 
    Q(pk=request.user.pk) 
).distinct() 
+0

真的嗎?過濾後的查詢集不僅僅是一個列表嗎?我不能使用Python的'append()'? – hobbes3 2012-04-12 06:58:06

+1

不。過濾的「QuerySet」仍然是一個「QuerySet」。它的表示只是*看起來像一個列表。 – 2012-04-12 07:01:22

+0

Ignacio,我猜@ hobbes3不需要在這裏執行'.distinct()',因爲只有一個左外連接 – okm 2012-04-12 07:03:36