Django 基础 7

ORM 一对多
一对多查询
通过class类(多类)查询对应的班名获得对应的对象 再通过对象的关联属性的名字可以获得对象的学校名
 
school = classInof.objects.filter(name='一中1班')
for i in school:
    print(i.sch.name)
 
当Queryset对象只有一个元素时
 
school = classInof.objects.filter(name='一中1班').first()  #first()获得列表的第一个元素
print(school.sch.name)
 
一对多增加
在school类(一类)创建对象同时级联创建对应的class类(多类)
 
school = schoolInof.objects.create(name='第四中学')
obj = classInof.objects.create(name='四中1班',sch=school)
 
一对多删除
通过class类中的关联属性sch来删除信息
classInof.objects.filter(sch__name='第四中学').delete() #删除class类中sch名字是第四中学的信息
 
一对多修改
通过class类中的关联属性sch来修改信息
classInof.objects.filter(sch__name='第四中学').update(name='五中1班') #更改class类中sch名字是第四中学的信息的名字为五中1班
 
ORM 多对多
多对多在数据库中会创建第三张表来关联两个表 通过关联属性来跨表操作,其中有三种方式add() 增加信息 remove() 删除一条信息 clear() 删除所有信息
 
多对多查询
obj = classInof.objects.filter(name='一中1班').first()
for i in obj.user.all():  #该user是关联属性
    print(i.user,i.passwd)
 
多对多增加
obj = classInof.objects.filter(name='一中1班').first()
user_obj = UserInof.objects.create(user='六六',passwd = '123456')
obj.user.add(user_obj.id) #add(id) id是新增用户的id
 
在第三个表间增加用户和班级的关系
obj = classInof.objects.filter(name='二中1班').first()
user_obj = UserInof.objects.filter(user='张三')
obj.user.add(*user_obj)  #add(*参数) 也可以增加关系
 
多对多删除
在第三个表间删除用户和班级的关系
obj = classInof.objects.filter(name='二中1班').first()
user_obj = UserInof.objects.filter(user='张三')
obj.user.remove(*user_obj)
 
 
多对多修改
在第三个表间修改用户和班级的关系
obj = classInof.objects.filter(name='一中1班').first()
user_obj = UserInof.objects.filter(user='六六')
obj.user.clear() #清除第三个表中一中1班的信息
obj.user.add(*user_obj) #在第三个表中添加六六和一中1班关联的信息
 
反向查询
当从有关系属性的表中查询另一个时,为正向查询。反向查询则反之。
格式: 没关联属性对象名.有关联属性类名小写_set.all()
 
user_obj = UserInof.objects.filter(user='张三').first()
#对象名.类名小写_set.all() 可以反向查询信息
for i in user_obj.classinof_set.all():
    print(i.name)
 
反向增加
在第三个表中反向增加用户和班级关系
user_obj = UserInof.objects.filter(user='张三').first()
claa_obj = classInof.objects.filter(name='二中1班')
user_obj.classinof_set.add(*claa_obj)
 
反向删除
在第三个表中反向删除用户和班级关系
user_obj = UserInof.objects.filter(user='张三').first()
claa_obj = classInof.objects.filter(name='二中1班')
user_obj.classinof_set.remove(*claa_obj)

转载于:https://my.oschina.net/u/3803568/blog/2993311

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值