多个模型之间的ManyToManyField关系

时间:2011-09-26 21:01:47

标签: django django-models

我有以下代表书籍和作者的模型。一本书可以有多个作者,作者可以写多本书。所以我使用Django的ManyToManyField类型将两个模型相互链接。

我可以使用Django Admin添加Book,并在此过程中创建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)

1 个答案:

答案 0 :(得分: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()由作者撰写(或共同撰写)的书籍组成。