一对一的映射
- 语法: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
 
查询数据
- 正向查询
b = B.objects.get(name = 'aaa') print(b.name,b.a.name) # aaa 和 王老师 - 反向查询
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)
                
                  
                  
                  
                  
                            
本文介绍了Django中一对一、一对多和多对多的关系映射。详细讲解了各种映射的创建数据、查询数据的方法,包括正向查询和反向查询。在一对一映射中,重点阐述了on_delete参数的不同选项,如CASCADE、PROTECT、SET_NULL和SET_DEFAULT。对于一对多映射,同样提到了正向和反向查询的操作。最后,讨论了多对多映射的实现,强调Django自动处理中间表,无需手动创建。
          
      
          
                
                
                
                
              
                
                
                
                
                
              
                
                
              
            
                  
					595
					
被折叠的  条评论
		 为什么被折叠?
		 
		 
		
    
  
    
  
            


            