跨表操作

谁都会走 提交于 2019-11-27 10:48:39

一、一对多跨表:

  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)
View Code

   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)
View Code

  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')]>

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!