跨表操作

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

以上是关于跨表操作的主要内容,如果未能解决你的问题,请参考以下文章

基于对象的跨表查询,多对多查询,多对多操作,聚合查询和分组查询,F查询和Q 查询

Django学习第7篇:Django之ORM跨表操作(聚合查询,分组查询,F和Q查询等)

Django之ORM跨表操作(聚合查询,分组查询,F和Q查询等)

Django 第六篇ORM跨表操作(聚合查询,分组查询,F和Q查询等)

第六模块:WEB框架开发 第1章·Django框架开发50~100

Django基础五之django模型层多表操作