Zhonghui

每个不曾起舞的日子,都是对生命的辜负

User Tools

Site Tools


程序:数据库:关联表

关系型数据库的关联表

不同的数据表之间是可以相互关联的(而且还是挺常见的,好像叫作JOIN?),有3种关联关系


一对多

多个 Article → 一个 Author

class Author(models.Model):
    name = models.CharField(max_length=100)
 
class Article(models.Model):
    title = models.CharField(max_length=200)
    author = models.ForeignKey(Author, on_delete=models.CASCADE, related_name='articles')
 
article = Article.objects.get(id=1)
article.author.name
 
author = Author.objects.get(id=1)
author.articles.all()  # 该作者的所有文章

一对一

一个 User 对应一个 Profile

from django.contrib.auth.models import User
 
class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    bio = models.TextField(blank=True)
 
profile = Profile.objects.get(user__username='alice')
profile.user.email
 
user = User.objects.get(username='alice')
user.profile.bio  # 反向访问

多对多

多个 Article ↔ 多个 Tag

class Tag(models.Model):
    name = models.CharField(max_length=50)
 
class Article(models.Model):
    title = models.CharField(max_length=200)
    tags = models.ManyToManyField(Tag, related_name='articles')
 
article = Article.objects.get(id=1)
article.tags.all()   # 这篇文章的所有标签
 
tag = Tag.objects.get(name='django')
tag.articles.all()   # 带有 django 标签的所有文章
/var/www/DokuWikiStick/dokuwiki/data/pages/程序/数据库/关联表.txt · Last modified: 2025/09/16 16:21 by zhonghui