2013-03-19 113 views
17

我正在努力爲我的項目獲得正確的查詢。 下面是一個例子或我的模型: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 

我怎麼出版商從書類的例子,我想所有的出版商有標題以「你好」所有的書? 謝謝

回答

28

如果您想獲得發佈商,您必須以Publisher開頭。這意味着您必須向後查詢書籍→發佈者關係。這裏是什麼文件說一下吧:

Lookups that span relationships

跨越的關係,只是使用模型之間的相關領域,由雙下劃線分隔的字段名,直到你到現場你想

...

要引用「反向」關係,只需使用模型的小寫名稱即可。

查詢:

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

它的工作^^多謝你救了我的最後期限^^ – 2013-03-19 18:19:27

+0

如果我想看到一些出版商出版的所有書籍? – 2016-11-10 13:45:47

+1

@ArindamRoychowdhury:'Book.objects.filter(publisher__name ='Some')' – 2016-11-10 19:31:42