Django-关系映射

一对一的映射

  • 语法:OneToOneField(类名,on_deletc = xxx)
    class A(model.Model):
    	...
    class B(model.Model):
    	a = model.OneToOneField(A,on_deletc = xxx) # on_delete是级联删除 关联的是主键联删除必须设置
    	### 级联删除 
    
  • on_deletc
    • model.CASCADF 级联删除,你删我就删
    • model.PROTECT 抛出protectedError以组织被引用对象的删除
    • model.SET_BULL 设置ForeignKey null;需要设置bull = True
    • model.SET_DEFAULT 将ForeignKey设置为默认值,必须设置默认值DEFAULT
创建数据
A1 = A.objects.create(name = '王老师')
B1 = B.objects.create(name = 'aaa',a = A1)
# B1 = B.objects.create(name = 'aaa', a_id = 1) # 即王老师的id,这里必须是具体的值 1 or A1.id
查询数据
  1. 正向查询
    b = B.objects.get(name = 'aaa')
    print(b.name,b.a.name) # aaa 和 王老师
    
  2. 反向查询
    a = a.objects.get(name = "王老师")
    peint(a.name,a.b.name) #王老师 aaa
    

一对多的映射

  • 语法:ForeignKey(类名,on_deletc = xxx)
    class A(model.Model):
    	...
    class B(model.Model):
    	a = model.ForeignKey(A,on_deletc = xxx) # on_delete是级联删除 关联的是主键级联删除必须设置
    	### 级联删除 
    
正向查询

和 一对一 一样

反向查询
a = A.objects.get(name = 'xxx')
b = a.b_set.all() #  b_set是类名小写加_set 返回数据对象可进行其他操作

多对多

多对多表达对象之间多对多复杂关系,mysql中需要依赖于第三张表来实现,Django中无需手动创建第三张表,Django自动创建

  • 语法:属性models.MangToManyField(mymodel)
创建数据
a1 = A.objects.create(name = 'aaa1')
a2 = A.objects.create(name = 'aaa2')

# a1,a2 绑定 b1
b1 = a1.b_set.create(name = 'bbb1')
a2.b_set.add(b1)
## 反着也可以创建
b2 =  B.objects.create(name = 'bbb2')
a3 = b2.a_set.create(name = 'aaa3')
b2.a_set.add(a1)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值