通过一个实际例子说明Django中的数据库操作方法法ForeignKey()的用法【数据表“一对多”关系】

当使用Django进行数据库操作时,ForeignKey(外键)是一种非常有用的字段类型。它允许在数据库表之间创建关联关系,类似于其他数据库系统中的外键概念。通过ForeignKey字段,我们可以建立一个模型与另一个模型的一对多关系。

以下是一个实际例子,使用ForeignKey字段在Django中创建一对多关系:

假设我们正在开发一个博客应用程序,其中有两个主要的模型:作者(Author)和文章(Post)。一个作者可以有多篇文章,而一篇文章只能由一个作者撰写。在这种情况下,我们可以使用ForeignKey字段将文章与作者关联起来。

首先,让我们创建Author模型和Post模型:

from django.db import models

class Author(models.Model):
    name = models.CharField(max_length=100)

    def __str__(self):
        return self.name

class Post(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    author = models.ForeignKey(Author, on_delete=models.CASCADE)

    def __str__(self):
        return self.title

在上述代码中,我们定义了Author模型和Post模型。Post模型中的author字段是一个ForeignKey字段,它将Post模型与Author模型相关联。on_delete=models.CASCADE参数表示当关联的作者被删除时,与该作者关联的所有文章也将被删除。

接下来,我们可以使用这些模型创建数据库表:

python manage.py makemigrations
python manage.py migrate

现在我们已经创建了Author和Post表,我们用下面的代码来演示数据表“一对多”关系的操作。

import os
import django

# 设置Dango运行时需要的环境变量DJANGO_SETTINGS_MODULE
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myshop.settings')

# 加载Django的设置
django.setup()

# 导入模型
from app1.models import Author, Post

# 创建一个作者
author1 = Author(name='wenhao')
author1.save()

# 创建一篇文章,并将其与刚才创建的作者相关联
post1 = Post(title='First Post', content='Hello, World!', author=author1)
post1.save()

# 再创建一篇文章,也将其与刚才创建的作者相关联
post2 = Post(title='My love', content='I love wang hong', author=author1)
post2.save()

# 获取一个作者的所有文章
author_get = Author.objects.get(name='wenhao')
posts_all = author_get.post_set.all()
for post in posts_all:
    print(post)

在上面的代码中,作者“wenhao”发表了两篇文章,文章的title分别为’First Post’和’My love’,通过Post模型的一对多成员author关联到表 Author。

如果要理解语句posts_all = author_get.post_set.all()中的post_set(),请参看我的另一篇博文,链接:https://blog.csdn.net/wenhao_ir/article/details/131668597

上面的代码运行结果如下:
在这里插入图片描述
可见作者“wenhao”对应的两篇文章的标题被打印出来了。
这里要多问一句,为什么内容没被打印出来呢?
请注意数据表模型中定义的下面语句:

    def __str__(self):
        return self.title

并结合Python的“魔术方法“(magic method)或“特殊方法“(special method)去理解这个问题,关于Python的“魔术方法“(magic method)或“特殊方法“(special method),请参见链接:https://blog.csdn.net/wenhao_ir/article/details/131395984

我们再去观察一下数据表中的内容,如下:
在这里插入图片描述
在这里插入图片描述
大家可以仔细观察下这两张表的内容,看下Author是怎样和Post进行一对多关联的。

通过上述示例,我们可以看到ForeignKey字段的用法。它允许我们在Django中轻松地建立模型之间的一对多关系,并且提供了便捷的方法来进行相关数据的操作。

猜你喜欢

转载自blog.csdn.net/wenhao_ir/article/details/131542371