多个模型之间的ManyToManyField关系
问题描述:
我有以下表示书籍和作者的模型。一本书可以有多个作者,作者可以写多本书。所以我使用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)
答
你并不需要两个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()
由该作者写(或合写)的书籍。
啊!棒极了。不知道它是这样工作的。非常感谢! – Raj