2012-04-12 4 views
0

Wenn ich eine Liste von User Objekten wie dieseFügen Sie ein bestimmtes Objekt (aber gleichen Typen) zu einem gefilterten Objekt in Django

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

bekommen wie auch request.user ich anfügen (die aktuellen angemeldeten Benutzer), das ist auch ein User?

Ich weiß, dass ich wahrscheinlich so etwas wie

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

tun können, aber ich bin nicht sicher, dass der obige Code kann doppelt umfassen request.user (wenn request.user.get_profile().user_type = 'special' als auch). Ich möchte auch vermeiden, die Datenbank mit einer komplizierten SQL-Anweisung zu treffen, um einen Benutzer hinzuzufügen, dem ich die Identität bereits kenne.

Antwort

2

Es ist billiger für die Datenbank als für Python, es zu tun.

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

Wirklich? Ist ein gefiltertes Abfrage-Set nicht nur eine Liste? Ich kann Pythons 'append()' nicht benutzen? – hobbes3

+1

Nein. Ein gefiltertes 'QuerySet' ist immer noch ein' QuerySet'. Seine Darstellung sieht nur * wie eine Liste aus. –

+0

Ignacio, ich denke, @ hobbes3 muss nicht '.distinct()' hier tun, weil es nur eine linke äußere Verbindung gibt – okm

Verwandte Themen