还记得第一次给两个数据库表“牵红线”的经历吗?那感觉就像在相亲角帮两个陌生人配对,既怕他们看对眼后太黏糊,又怕他们婚后各玩各的。别慌,Django的一对一字段(OneToOneField)就是你的专属红娘,保证让两个模型结成“一生只爱一个”的专属CP!
第一章:为什么你的模型需要“一对一”恋爱?
想象一下,你去办银行卡,柜员小姐姐跟你说:“亲,一个人可以办无数张卡哦!”——这很合理,这就是一对多关系。但如果她说:“一个人可以在我们系统里注册无数个身份信息”——是不是瞬间觉得这银行要完?
这就是一对一字段的用武之地!有些数据关系,天生就该是唯一的:
- 用户和用户资料(一个人只有一个头像、一个生日)
- 员工和员工工位(一个坑只能蹲一只萝卜)
- 产品和产品详情页(一个产品对应一个专属页面)
在Django的世界里,一对一关系就像是给模型发了结婚证——严格保证“一夫一妻制”。任何试图劈腿的行为(比如给一个用户分配两个资料表)都会引发Django的正义制裁!
第二章:初识OneToOneField——比相亲网站更精准的匹配系统
基本语法超简单:
from django.db import models
class User(models.Model):
name = models.CharField(max_length=100)
email = models.EmailField()
class UserProfile(models.Model):
user = models.OneToOneField(
User,
on_delete=models.CASCADE, # 用户没了,资料也跟着殉情
primary_key=True # 可选:让这个关系成为主键
)
avatar = models.ImageField(upload_to='avatars/')
birthday = models.DateField()
看吧,就这么几行代码,两个模型的“婚事”就定下来了!
on_delete参数的几种“分手方式”:
CASCADE:一方删除,另一方跟着殉情(最常用)PROTECT:阻止删除,像民政局劝和的阿姨SET_NULL:一方删除,另一方恢复单身(null=True时可用)SET_DEFAULT:一方删除,另一方找备胎(设置默认值)
第三章:实战!构建一个“用户-资料”CP系统
来,咱们亲

最低0.47元/天 解锁文章
8万+

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



