2016-07-27 8 views
1

Ich habe 2 Klassen:Wie kann man Daten eines Fremdschlüssels im Django-Modell mit einem einzigen Anruf abrufen?

class Author(models.Model): 
    name = models.CharField(max_length=250, null=True) 
    location = models.CharField(max_length=250, null=True) 


class Book(models.Model): 
    author = models.ForeignKey(Author, null=True, related_name="book") 
    no_of_pages = models.IntegerField(null=True) 
    genre = models.CharField(max_length=250, null=True) 

Ich mag den Autor Daten von Buch können, Zugriff auf einen einzigen Anruf verwenden. ZB:

books = Book.objects.filter(genre="fiction") 
for book in books: 
    print book.author.name, book.author.location 

Wie ich verstehe, hat diese db mehrmals getroffen. Gibt es eine Möglichkeit, die Daten des Autors mit einem einzigen Anruf zu erhalten?

+1

Es trifft nur die DB mehrmals, weil Sie in einer for-Schleife sind. Sie haben mehrere Bücher herausgefiltert, damit Sie mehrere Autoren durchlaufen können. – marcusshep

Antwort

2

Sie können select_related verwenden.

books = Book.objects.filter(genre="fiction").select_related("author") 

Dies wird den db nur einmal ein Auto laden das author Modell innerhalb der book holen.

+0

Danke! Es klappt. – linuxfreak