跨表操作
Posted gwwj
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了跨表操作相关的知识,希望对你有一定的参考价值。
一、一对多跨表:
1.建表:
1 from django.db import models 2 3 class UserInfo(models.Model): 4 username=models.CharField(max_length=32) 5 password=models.CharField(max_length=32) 6 ut=models.ForeignKey(to=‘UserType‘,on_delete=True) 7 class UserType(models.Model): 8 title=models.CharField(max_length=32)
2.插入数据:
1 #创建数据 2 models.UserType.objects.create(title=‘人事部‘) 3 models.UserType.objects.create(title=‘财务部‘) 4 models.UserType.objects.create(title=‘公关部‘) 5 6 models.UserInfo.objects.create(username=‘杨国伟‘,password=‘123‘,ut_id=1) 7 models.UserInfo.objects.create(username=‘石恩光‘,password=‘123‘,ut_id=1) 8 models.UserInfo.objects.create(username=‘钱博文‘,password=‘123‘,ut_id=3) 9 models.UserInfo.objects.create(username=‘杨理想‘,password=‘123‘,ut_id=2) 10 models.UserInfo.objects.create(username=‘周腾飞‘,password=‘123‘,ut_id=3)
3.正向跨表
UserInfo中有ForeignKey字段,从UserInfo到UserType是正向跨表,反之是反向跨表。
#三种不同取值方法的跨表操作
1 obj=models.UserInfo.objects.filter(id=1).first()#获取一个UserInfo对象。结果是一个object 2 print(obj) 3 print(obj.username,obj.password,obj.ut_id,obj.ut.title) 4 obj=models.UserInfo.objects.values(‘username‘,‘password‘,‘ut_id‘,‘ut__title‘)#结果是一个字典 5 print(obj) 6 obj=models.UserInfo.objects.values_list(‘username‘,‘password‘,‘ut_id‘,‘ut__title‘)#结果是一个元组 7 print(obj)
运行结果:
UserInfo object (1)
杨国伟 123 1 人事部
<QuerySet [‘username‘: ‘杨国伟‘, ‘password‘: ‘123‘, ‘ut_id‘: 1, ‘ut__title‘: ‘人事部‘, ‘username‘: ‘石恩光‘, ‘password‘: ‘123‘, ‘ut_id‘: 1, ‘ut__title‘: ‘人事部‘, ‘username‘: ‘钱博文‘, ‘password‘: ‘123‘, ‘ut_id‘: 3, ‘ut__title‘: ‘公关部‘, ‘username‘: ‘杨理想‘, ‘password‘: ‘123‘, ‘ut_id‘: 2, ‘ut__title‘: ‘财务部‘, ‘username‘: ‘周腾飞‘, ‘password‘: ‘123‘, ‘ut_id‘: 3, ‘ut__title‘: ‘公关部‘]>
<QuerySet [(‘杨国伟‘, ‘123‘, 1, ‘人事部‘), (‘石恩光‘, ‘123‘, 1, ‘人事部‘), (‘钱博文‘, ‘123‘, 3, ‘公关部‘), (‘杨理想‘, ‘123‘, 2, ‘财务部‘), (‘周腾飞‘, ‘123‘, 3, ‘公关部‘)]>
4.反向跨表
obj.小写的表名_set
1 obj=models.UserType.objects.filter(id=1).first() 2 print(obj) 3 print(obj.userinfo_set.all()) 4 for item in obj.userinfo_set.all(): 5 print(item.username,item.password) 6 obj=models.UserType.objects.values(‘title‘,‘userinfo__username‘,‘userinfo__password‘) 7 print(obj) 8 obj = models.UserType.objects.values_list(‘title‘, ‘userinfo__username‘, ‘userinfo__password‘) 9 print(obj)
运行结果:
UserType object (1)
<QuerySet [<UserInfo: UserInfo object (1)>, <UserInfo: UserInfo object (2)>]>
杨国伟 123
石恩光 123
<QuerySet [‘title‘: ‘人事部‘, ‘userinfo__username‘: ‘杨国伟‘, ‘userinfo__password‘: ‘123‘, ‘title‘: ‘人事部‘, ‘userinfo__username‘: ‘石恩光‘, ‘userinfo__password‘: ‘123‘, ‘title‘: ‘公关部‘, ‘userinfo__username‘: ‘钱博文‘, ‘userinfo__password‘: ‘123‘, ‘title‘: ‘财务部‘, ‘userinfo__username‘: ‘杨理想‘, ‘userinfo__password‘: ‘123‘, ‘title‘: ‘公关部‘, ‘userinfo__username‘: ‘周腾飞‘, ‘userinfo__password‘: ‘123‘]>
<QuerySet [(‘人事部‘, ‘杨国伟‘, ‘123‘), (‘人事部‘, ‘石恩光‘, ‘123‘), (‘公关部‘, ‘钱博文‘, ‘123‘), (‘财务部‘, ‘杨理想‘, ‘123‘), (‘公关部‘, ‘周腾飞‘, ‘123‘)]>
以上是关于跨表操作的主要内容,如果未能解决你的问题,请参考以下文章
基于对象的跨表查询,多对多查询,多对多操作,聚合查询和分组查询,F查询和Q 查询
Django学习第7篇:Django之ORM跨表操作(聚合查询,分组查询,F和Q查询等)
Django之ORM跨表操作(聚合查询,分组查询,F和Q查询等)
Django 第六篇ORM跨表操作(聚合查询,分组查询,F和Q查询等)