我有以下代表书籍和作者的模型。一本书可以有多个作者,作者可以写多本书。所以我使用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)
答案 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
实例a
,a.book_set.all()
由作者撰写(或共同撰写)的书籍组成。