Django基础教程(三十六)Django模型关系字段之外键字段:别硬撑了!Django模型关系“相亲角”,外键字段才是你的最强僚机

嘿,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)

看起来好像没啥问题?但坑大了去了!

  1. 数据完整性是啥?能吃吗?:我完全可以往category_id里塞一个根本不存在的分类ID,比如 999。数据库不会报错,但你的文章就成了“无主孤魂”,查询的时候直接“裂开”。
  2. 查询效率低到哭:你想找出一篇属于“Python技术”分类的所有文章?你得先查Category表,找到“Python技术”的ID,然后再用这个ID去Article表里一条条对比category_id。这波操作,数据库引擎直呼内行(才怪)!
  3. 代码又臭又长:每次操作都得手动处理ID,代码里充满了article.category_idcategory.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

“叮!”

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

值引力

持续创作,多谢支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值