2010-03-02 17 views
7

Znajduję klucze obce django nieco zagmatwane, czy istnieje sposób, aby zrobić widok poniżej, za pomocą pojedynczego zapytania?Django - Uzyskaj obiekty kluczy obcych w jednym zapytaniu?

# 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') 

Odpowiedz

9

możliwość zapytania Programme i przypisać do programme, ale nigdy nie używać wynik w dowolnym miejscu. Po prostu usuń tę linię.

+0

Po prostu zauważyłem to ... doh! Muszę wrócić, kiedy będę miał więcej sensu ... –

9

myślę szukasz czegoś takiego:

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

które select_related, można umieścić przed ostatecznym GET. To linia:

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

powinien wyglądać

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

Niestety jak podkreślono tutaj: get foreign key objects in a single query - Django będzie tylko w stanie odzyskać aktorów sposób jak select_related działa tylko na obiektach posiadających ForeignKeys i nie vice versa.

+0

'select_related' będzie potrzebne tylko, jeśli chcesz uzyskać dostęp do' actor.programme.name' bez dodatkowego trafienia DB na aktora. W przeciwnym razie jest to zbyteczne. – Hamish

Powiązane problemy