2011-09-26 190 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

相关问题