2011-09-26 134 views
5

我有以下表示書籍和作者的模型。一本書可以有多個作者,作者可以寫多本書。所以我使用Django的ManyToManyField類型將兩個模型鏈接到一起。多個模型之間的ManyToManyField關係

我可以添加一個Book,使用Django Admin或者在這個過程中創建一個Author。但是當我查看我剛創建的Author時,它沒有鏈接到Book。我必須明確地設置Author實例和Book實例之間的反向關係。

就是這樣嗎?或者我可以做些與衆不同的事情嗎?

Models.py

class Book(models.Model):  
    book_title = models.CharField(max_length=255, blank=False) 
    authors = models.ManyToManyField('Author', blank=True) 

class Author(models.Model): 
    author_first_name = models.CharField(max_length=255, blank=False) 
    author_last_name = models.CharField(max_length=255, blank=False) 
    books = models.ManyToManyField(Book, blank=True) 

回答

7

你並不需要兩個ManyToManyField定義,因爲沒有ManyToManyField模型類是通過反向關係相關的其他。請參閱:https://docs.djangoproject.com/en/dev/topics/db/queries/#many-to-many-relationships

如果你定義的兩個模型類爲:

class Book(models.Model):  
    book_title = models.CharField(max_length=255, blank=False) 
    authors = models.ManyToManyField('Author', blank=True) 

class Author(models.Model): 
    author_first_name = models.CharField(max_length=255, blank=False) 
    author_last_name = models.CharField(max_length=255, blank=False) 

那麼對於任何Author例如aa.book_set.all()由該作者寫(或合寫)的書籍。

+0

啊!棒極了。不知道它是這樣工作的。非常感謝! – Raj