嘿,Django的小伙伴们,不知道你们有没有过这样的经历:对着数据库里一堆零零散散的表,感觉它们之间明明有千丝万缕的联系,但在代码里却怎么也体现不出来?就像你微信里加了几百个好友,却理不清谁是你的同事,谁又是你的“饭搭子”。
别慌!今天,咱们就来请出Django模型世界的“最强僚机”——外键字段。它可不是一个冷冰冰的数据库概念,而是一位神通广大的“红娘”,专门负责给你的数据表“牵线搭桥”,让它们从此告别孤单,走向幸福(呃,是高效关联)的生活。
第一章:开篇暴击——没有外键的世界有多“糙”?
想象一下,你要开发一个简单的博客系统。没有外键之前,你的Article(文章)模型和Category(分类)模型可能是这样写的:
# 这是“糙汉子”版写法,请勿模仿!
class Article(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
category_id = models.IntegerField() # 仅仅存了个分类ID的数字
class Category(models.Model):
name = models.CharField(max_length=20)
看起来好像没啥问题?但坑大了去了!
- 数据完整性是啥?能吃吗?:我完全可以往
category_id里塞一个根本不存在的分类ID,比如 999。数据库不会报错,但你的文章就成了“无主孤魂”,查询的时候直接“裂开”。 - 查询效率低到哭:你想找出一篇属于“Python技术”分类的所有文章?你得先查
Category表,找到“Python技术”的ID,然后再用这个ID去Article表里一条条对比category_id。这波操作,数据库引擎直呼内行(才怪)! - 代码又臭又长:每次操作都得手动处理ID,代码里充满了
article.category_id和category.id这种让人眼花的变量。
看到没?没有外键,你就像在用一个没有导航、全靠记忆和运气的破地图开车,随时可能掉进坑里。
第二章:“僚机”登场——外键字段的自我介绍
现在,有请我们的主角闪亮登场!把上面的“糙汉子”代码改造一下:
from django.db import models
class Category(models.Model):
name = models.CharField(max_length=20)
def __str__(self):
return self.name
class Article(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
# 看这里!灵魂注入!
category = models.ForeignKey(Category, on_delete=models.CASCADE)
def __str__(self):
return self.title
“叮!”

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



