📜  在 django 中为外键表选择 realted - Python (1)

📅  最后修改于: 2023-12-03 15:23:08.269000             🧑  作者: Mango

在 Django 中为外键表选择 related

在 Django 中,使用外键 ForeignKey 定义一对多的关系是很常见的。外键表中的每个数据都与主表中的一条数据对应,这个对应关系被定义为实体之间的关系。如果表与其他表或者模型有外键,则需要定义 related_name 属性来为该表的外键建立对应关系。本文将介绍如何在 Django 中为外键表选择 related_name。

什么是 related_name?

related_name 属性是在定义一对多关系时使用的 Django ORM 属性。当您在外键字段上使用 related_name 时,您将建立一个反向关系。它可以通过相关对象从不同的关联对象访问上述对象。related_name 指定反向关系的名称。如果没有为其指定名称,则 Django ORM 将使用默认名称。

外键表的定义

为了很好地说明 related_name 的使用,下面展示了两个 Django 模型之间的一对多的实例,其中 Book 是主表,Author 是外键表。

class Author(models.Model):
    name = models.CharField(max_length=100)
    
class Book(models.Model):
    title = models.CharField(max_length=100)
    author = models.ForeignKey(Author, on_delete=models.CASCADE)
使用 related_name

在上面的例子中,Book 模型定义了对 Author 的外键关系。我们可以通过在 Book 模型中添加 related_name 属性,将 Book 模型与 Author 模型建立反向关系。

例如,我们可以为作者设置一个名为 books 的反向关系,它可以让我们在 Author 模型的实例中访问到它所写的所有书籍。 在这种情况下,模型的代码将如下所示:

class Author(models.Model):
    name = models.CharField(max_length=100)
    
class Book(models.Model):
    title = models.CharField(max_length=100)
    author = models.ForeignKey(Author, on_delete=models.CASCADE, related_name='books')
访问使用 related_name 的反向关系

添加 related_name 属性后,我们可以从一个作者实例中访问其写的所有书籍。为了获取作者及其所有书籍的内容,您可以这样写代码:

author = Author.objects.get(name='Jane Austen')
books = author.books.all()

上面的代码中,.books.all() 方法将返回与该作者相关的所有书籍,它们是 Book 模型的实例。

这就是在 Django 中为外键表选择 related_name 的步骤。通过指定一个反向名称,反向关系可以帮助开发人员更容易地在应用程序中获取对象之间的关系。 请注意,您可以使用任何您想要的名称来为反向关系命名。