【问题标题】:ManyToManyField Relationships Between Multiple Models多个模型之间的 ManyToManyField 关系
【发布时间】:2011-11-25 13:15:15
【问题描述】:

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

我可以使用 Django Admin 添加一个Book,并在此过程中创建一个Author。但是当我查看我刚刚创建的Author 时,它并没有链接到Book。我必须明确设置Author 实例和Book 实例之间的反向关系。

是这样吗,还是我可以做一些不同的事情?

模型.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)

【问题讨论】:

    标签: django django-models


    【解决方案1】:

    您不需要两个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() 包含作者撰写(或共同撰写)的书籍。

    【讨论】:

    • 啊!棒极了。不知道它是这样工作的。非常感谢!
    猜你喜欢
    • 2018-05-23
    • 2017-06-26
    • 1970-01-01
    • 1970-01-01
    • 2021-01-24
    • 2021-05-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多