2010-11-01 4 views
8

Ho un modello django in questo modo:Django - valore Accesso ForeignKey senza colpire banca dati

class Profile_Tag(models.Model): 
    profile = models.ForeignKey(Profile) 
    tag = models.ForeignKey(Tag) 

e una vista in questo modo:

pts = Profile_Tag.objects.all() 
for pt in pts: 
    print pt.profile.id 

non v'è alcun modo per accedere al profilo ForeignKey senza colpire il database ogni volta? Non voglio interrogare la tabella dei profili. Voglio solo prendere gli ID dalla tabella Profile_Tag.

+1

Come fai a sapere che "colpisce" il database? Esiste un'ampia gestione della cache sia nel livello ORM che nel database. –

+0

Bene, a chiunque altro leggendo questo e per rispondere alla domanda di Lott ... fa un DB colpito in Django 1.4 (almeno). È possibile attivare la registrazione del database per vedere tutte le query e risultati 'pt.profile.id' in una query mentre' pt.profile_id' no. È possibile che la chiamata a '.id' non abbia esito positivo, quindi è possibile che ciò cambi in futuro (o già è diverso, non ho provato le versioni più recenti). –

risposta

10

si può fare qualcosa di simile:

pt_ids = Profile_Tag.objects.values_list('profile', flat=True) 

Ciò restituirà si elenco di ID. Per l'istanza di modello, c'è un altro modo:

pts = Profile_Tag.objects.all() 
for pt in pts: 
    print pt.profile_id 
+0

eccellente. grazie. Credo che avrei dovuto pensarci per provarlo – Jesse