2013-12-12 34 views
0

比方說,我們有我們的Django應用程序兩種型號:如何從對方查詢Django的多對多場

class Author(models.Model): 
    name = models.CharField() 

class Book(models.Model): 
    name = models.CharField() 

通常情況下,一個多對多的領域我會做一箇中間表,只是查詢:

class BookAuthor(models.Model): 
    book = models.ForeignKey(Book) 
    author = models.ForeignKey(Author) 

從那以後,我可以通過bookauthor簡單查詢BOOKAUTHOR。

然而,Django的ManyToManyField將其更改爲:

class Author(models.Model): 
    name = models.CharField() 

class Book(models.Model): 
    name = models.CharField() 
    authors = models.ManyToManyField(Author) 

所以,現在我可以查詢一書的作者......但什麼倒過來 - 作者的書嗎?

+0

您只需在'ManyToManyField'字段中定義'related_name' attr。請參閱[文檔](https://docs.djangoproject.com/en/dev/ref/models/fields/#django.db.models.ManyToManyField) – mariodev

回答

2

你可以得到作者的書是這樣的:

author.book_set.all() 

注意,默認處於查詢不同,你只需要使用型號名稱:

Author.objects.filter(book__name__startswith="The") 

您可以覆蓋這兩個通過在您的M2M字段中設置related_namerelated_query_name屬性來實現默認設置。請參閱documentation