多个模型之间的ManyToManyField关系

Raj*_*Raj 5 django django-models

我有以下模型代表书籍和作者.一本书可以有多个作者,作者可以写多本书.所以我使用Django的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)
Run Code Online (Sandbox Code Playgroud)

Dan*_*ien 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)
Run Code Online (Sandbox Code Playgroud)

然后对于任何Author实例a,a.book_set.all()由作者写的(或共同写的)书籍组成.