2013-03-19 20 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

Publishersを取得するには、Publisherから開始する必要があります。つまり、書籍→の出版社の関係を逆にクエリする必要があります。ドキュメントはそれについて言うことここにあります:

Lookups that span relationships

関係をスパンに、あなたは

をしたいフィールドに着くまでちょうど、二重のアンダースコアで区切られたモデル間の関連分野のフィールド名を使用します

...

「逆の」関係を参照するには、モデルの小文字の名前を使用します。

クエリ:

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

は、それが働いた^^おかげであなたは私の期限^^ –

+0

を救ったくさん私はいくつかの出版社によって出版されたすべての本を見たい場合は? –

+1

@ArindamRoychowdhury: 'Book.objects.filter(publisher__name = 'Some')' –