Ho un QuerySet del modello auth.User.Annotazioni ORG Django: gruppo più comune di user queryset
Voglio sapere: quali gruppi sono quelli che contengono la maggior parte di questi utenti.
Esempio: Ho tre gruppi, con questi utenti:
- g1: u1 u2 u3 U4
- g2: u2 u1
- g3: u1 U4 U5 U6
- g4: U6 u5 u7
User-QuerySet: u1 u2 u3
Risultato (conteggio i componenti che sono nel dato dall'utente Queryset):
- g1: Numero 3
- g2: conteggio 2
- g3: COUNT 1
- g4 Conteggio 0
Come posso ottenere un QuerySet con annotazioni del modello Raggrupparlo con Django 1.8?
Use Case
Visualizza quanti membri con "x" il nome utente ogni gruppo ha.
SQL
SELECT auth_group.id, auth_group.name,
(SELECT COUNT(auth_user_groups.id) FROM auth_user_groups WHERE
auth_user_groups.group_id = auth_group.id AND
auth_user_groups.user_id IN (SELECT auth_user.id FROM auth_user WHERE username LIKE '%x%')) AS user_cnt
FROM auth_group ORDER BY user_cnt DESC;
Aggiornamento
Gruppo g4
non ha membri corrispondenti, ma dovrebbe essere in QuerySet annotato.
Bello, la tua risposta funziona. SQL risultante: "SELECT" auth_group "." Id "," auth_group "." Nome ", COUNT (CASO QUANDO" auth_user_groups "." User_id "IN (SELECT U0." Id "FROM" auth_user "U0 DOVE U0." username ": text LIKE testfoobar%) THEN 1 ELSE NULL END) AS" user_cnt "FROM" auth_group "LEFT OUTER JOIN" auth_user_groups "ON (" auth_group "." id "=" auth_user_groups "." group_id ") GROUP BY" auth_group"."id", "auth_group". "name" ORDER BY "user_cnt" DESC' – guettli