2010-03-02 17 views
7

Sto trovando le chiavi esterne django un po 'confuse, c'è un modo per fare la vista qui sotto, usando una singola query?Django - Ottieni oggetti chiave esterna in una singola query?

# Model 
class Programme(models.Model): 
    name = models.CharField(max_length = 64) 

class Actor(models.Model): 
    programme = models.ForeignKey(Programme) 
    name = models.CharField(max_length = 64) 


# View 
def list_actors(request, programme_id): 
    programme = Programme.objects.filter(id = programme_id)[0] 
    actors = Actor.objects.filter(programme = programme_id) 
    json = simplejson.dumps([{ 
     'name': str(actor.name), 
     'rating': str(actor.rating),} for actor in actors]) 
    return HttpResponse(json, mimetype='application/javascript') 

risposta

9

tua ricerca Programme e assegnare ai programme, ma non si utilizza mai il risultato ovunque. Basta rimuovere quella linea.

+0

Si è appena notato questo ... doh! È necessario tornare quando posso avere più senso ... –

9

Penso che si sta cercando di qualcosa di simile:

https://docs.djangoproject.com/en/dev/ref/models/querysets/#select-related

che sono select_related, si mette davanti get finale. Cioè la vostra linea:

actors = Actor.objects.filter(programme = programme_id) 

dovrebbe essere simile

actors = Actor.objects.select_related().filter(programme = programme_id) 

Purtroppo come sottolineato qui: get foreign key objects in a single query - Django vi sarà solo in grado di recuperare gli attori in questo modo come select_related funziona solo su oggetti che hanno ForeignKeys e non il vizio versa.

+0

'select_related' sarebbe necessario solo se si volesse accedere a' actor.programme.name' senza un hit DB extra per attore. Altrimenti è superfluo. – Hamish

Problemi correlati