2010-03-10 19 views
9

Ho due modelli, Design e Profile. Il profilo è collegato in settings.py come profilo da utilizzare con il modello Utente. Quindi posso accedervi tramite user.get_profile().Come filtrare una query per proprietà del profilo utente in Django?

E ogni istanza Design ha una proprietà author che è una Chiave esterna per Utente.

Così, quando sono qualsiasi vista, posso ottenere lo screenname (una proprietà di profilo) da:

user.get_profile().screenname

Ma qual è la sintassi per cercare per FILTRO per questa proprietà? Quello che ho attualmente:

designs = Design.objects.filter(author__userprofile__screenname__icontains=w)

Questo non funziona. Pensieri?

risposta

8

Se la classe si chiama profilo Profilo, e non hanno personalizzato per l'utente < -> relazione profilo utilizzando la proprietà related_name del ForeignKey, allora non dovresti essere accedendo tramite:

designs = Design.objects.filter(author__user__profile__screenname__icontains=w) 

Il Utente -> Il profilo si estende su una relazione, quindi è necessario il doppio trattino di sottolineatura extra.

+0

Chiudi. Dovevo fare: author__profile__screenname. Grazie per l'aiuto! – Sebastian

+1

Non sono sicuro se questo è cambiato, ma per me (usando Django 1.3) ho dovuto usare _____userprofile_____ e non _____profile_____ – mhost

+2

@mhost Dipende da come si nomina la classe del profilo utente, dal momento che non è un modello integrato. Funzionerà su qualsiasi modello con OneToOneField che punta al modello User –

Problemi correlati