不同的数据表之间是可以相互关联的(而且还是挺常见的,好像叫作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 标签的所有文章