2013-03-19 27 views
17

Sto lottando per ottenere la query corretta per il mio progetto. Ecco un esempio o il mio modello:Chiave estera filtro Django

from django.db import models 

class Publisher(models.Model): 
    name = models.CharField(max_length=30) 
    address = models.CharField(max_length=50) 
    city = models.CharField(max_length=60) 
    state_province = models.CharField(max_length=30) 
    country = models.CharField(max_length=50) 
    website = models.URLField() 

    def __unicode__(self): 
     return self.name 

class Author(models.Model): 
    first_name = models.CharField(max_length=30) 
    last_name = models.CharField(max_length=40) 
    email = models.EmailField() 

    def __unicode__(self): 
     return u'%s %s' % (self.first_name, self.last_name) 

class Book(models.Model): 
    title = models.CharField(max_length=100) 
    authors = models.ManyToManyField(Author) 
    publisher = models.ForeignKey(Publisher) 
    publication_date = models.DateField() 

    def __unicode__(self): 
     return self.title 

Come faccio ad avere editore dalla classe libro per esempio voglio ottenere tutte editore per tutti i libri che hanno il titolo che iniziano con 'ciao'? Grazie

risposta

28

Se si desidera ottenere editori, è necessario iniziare con Publisher. Ciò significa che devi eseguire una query attraverso la relazione Publisher Book → all'indietro. Ecco ciò che i documenti dicono su di esso:

Lookups that span relationships

per attraversare un rapporto, basta usare il nome del campo di campi correlati attraverso modelli, separati da doppie sottolineature, fino ad arrivare al campo che si desidera

...

Per fare riferimento a una relazione "inversa", utilizzare solo il nome in minuscolo del modello.

La query:

Publisher.objects.filter(book__title__startswith='hello') 
+1

ha funzionato ^^ Grazie mille mi hai salvato la scadenza ^^ –

+0

Cosa succede se voglio vedere tutti i libri pubblicati da qualche editore? –

+1

@ArindamRoychowdhury: 'Book.objects.filter (editore__name = 'Alcuni')' –