1.最简单的跨表,查询外键表中符合主表条件的记录列表

#用户类型表
class User_typ(models.Model):name=models.CharField(max_length=32)#用户表
class User(models.Model):name=models.CharField(max_length=32)age=models.IntegerField(max(100))type=models.ForeignKey(User_typ)#查询用户表里所有记录(对象列表)
obj_list=User.objects.all()#查询用户表里某一列字段的所有记录(对象列表)
obj_field_list=User.objects.all().values('name')#跨表
#查询用户表中,用户类型为 普通用户(用户类型表中有一条记录为‘普通用户’) 的所有记录(对象列表)
obj=User.objects.filter(type__name='普通用户')

View Code

2.最简单的多表联查,查询外键表中符合主表的主表的条件的记录列表

#主表aa
class aa(models.Model):a=models.CharField(max_length=32)#外键表bb,同时也是cc的主表
class bb(models.Model):b=models.CharField(max_length=32)b1=models.ForeignKey(User_typ)#外键表cc
class cc(models.Model):c=models.CharField(max_length=32)c1=models.ForeignKey(User_typ)#cc表中符合aa表中a==‘xx’的记录列表
obj_list=cc.objects.filter(c1__b1__a='xx')

View Code

3.书、出版社、作者,三者之间互相查来查去

1.建立这四个表

#一对一    OneToOne(表名)
#一对多    ForeignKey(表名)
#多对多    ManyToMany(表名)#建立书表
class Book(models.Model):title = models.CharField(max_length=32)publishDdata = models.DateField()  # 出版日期price = models.DecimalField(max_digits=5, decimal_places=2)  # 一共5位,保留两位小数publish = models.ForeignKey("Publish")  #foreignkey(表名)建立的一对多关系authorlist = models.ManyToManyField("Author")  #建立的多对多的关系    def __str__(self):  #__str__方法使用来吧对象转换成字符串的,你返回啥内容就打印啥return self.title#建立出版社表
class Publish(models.Model):name =models.CharField(max_length=32)addr = models.CharField(max_length=32)def __str__(self):return self.name#建立作者表
class Author(models.Model):name = models.CharField(max_length=32)age = models.IntegerField()#建立作者详细信息表
class AuthorDeital(models.Model):tel = models.IntegerField()addr = models.CharField(max_length=32)author = models.OneToOneField("Author")  #建立的一对一的关系

2.orm字段必须要知道的一些属性

(0)null如果为True,Django 将用NULL 来在数据库中存储空值。 默认值是 False.(1)blank如果为True,该字段允许不填。默认为False。
要注意,这与 null 不同。null纯粹是数据库范畴的,而 blank 是数据验证范畴的。
如果一个字段的blank=True,表单的验证将允许该字段是空值。如果字段的blank=False,该字段就是必填的。(2)default字段的默认值。可以是一个值或者可调用对象。如果可调用 ,每有新对象被创建它都会被调用。(3)primary_key如果为True,那么这个字段就是模型的主键。如果你没有指定任何一个字段的primary_key=True,
Django 就会自动添加一个IntegerField字段做为主键,所以除非你想覆盖默认的主键行为,
否则没必要设置任何一个字段的primary_key=True。(4)unique如果该值设置为 True, 这个数据字段的值在整张表中必须是唯一的(5)choices
由二元组组成的一个可迭代对象(例如,列表或元组),用来给字段提供选择项。 如果设置了choices ,
默认的表单将是一个选择框而不是标准的文本框,而且这个选择框的选项就是choices 中的选项。这是一个关于 choices 列表的例子:YEAR_IN_SCHOOL_CHOICES = ((‘FR‘, ‘Freshman‘),(‘SO‘, ‘Sophomore‘),(‘JR‘, ‘Junior‘),(‘SR‘, ‘Senior‘),(‘GR‘, ‘Graduate‘),
)
每个元组中的第一个元素,是存储在数据库中的值;第二个元素是在管理界面或 ModelChoiceField 中用作显示的内容。
在一个给定的 model 类的实例中,想得到某个 choices 字段的显示值,就调用 get_FOO_display 方法(这里的 FOO 就是 choices 字段的名称 )。例如:from django.db import modelsclass Person(models.Model):SHIRT_SIZES = ((‘S‘, ‘Small‘),(‘M‘, ‘Medium‘),(‘L‘, ‘Large‘),)name = models.CharField(max_length=60)shirt_size = models.CharField(max_length=1, choices=SHIRT_SIZES)>>> p = Person(name="Fred Flintstone", shirt_size="L")
>>> p.save()
>>> p.shirt_size
‘L‘
>>> p.get_shirt_size_display()
‘Large

View Code

3.orm添加记录,其实重要的是先查到,然后再添加就比较容易了,传说中的三种方式,貌似实际应用中只有save()的方式可以使用,原因无他,只有save()能触发django定义的一些钩子函数,留下数据更改的日志信息,比较安全。

4.跨表查询一览图

#一对一查询# 正向查询:手机号为13245的作者的姓名
deital_obj = models.AuthorDeital.objects.filter(tel="13245").first()print(deital_obj.author.name)# 反向查询:查询作者韩寒的手机号
author_obj = models.Author.objects.filter(name="韩寒").first()print(author_obj.authordeital.tel)#可以看出来,一对一就如同将两个表何为一个表,然后一个表起两个名字似的#一对多查询# 正向查询:查询《金鳞岂是池中物》的出版社的地址# 找到《金鳞岂是池中物》那一条记录对象
book_obj = models.Book.objects.filter(title="金鳞岂是池中物")[0]print(book_obj.publish)  # 拿到的是关联出版社的对象
print(book_obj.publish.addr) #出版《金鳞岂是池中物》的那家出版社的地址# 反向查询:查询人民出版社出版过的所有的书的名字#找到叫‘人民出版社’的出版社记录(对象)
pub_obj = models.Publish.objects.filter(name="人民出版社")[0]
# 叫‘人民出版社出版’的出版社 出版的所有书的对象集合
book_list=publish.book_set.all()
#用for循环遍历查询出每本书的名字
for book_obj in book_list:print(book_obj.title)#多对多查询记录# 正向查询:查询《金鳞岂是池中物》这本书的所有的作者的姓名和年龄
book_obj = models.Book.objects.filter(title="金鳞岂是池中物")[0] #找到书的记录(对象)
print(book_obj.authorlist.all().values("name", "age"))  # 这本书关联的所有作者对象的集合,注意这里又表现出了一对一的本质是二表合一的特性# 反向查询:查询作者‘兰陵笑笑生’ 出了哪几本书
lan_obj = models.Author.objects.filter(name="兰陵笑笑生")[0]#找到作者的记录(对象)
print(lan_obj.book_set.all())  # 与该作者关联的所有书对象的集合

转载于:https://www.cnblogs.com/xuepangzi/p/8946910.html

django orm 重点大全相关推荐

  1. Django ORM操作

    Django ORM操作 一般操作 看专业的官网文档,做专业的程序员! 必知必会13条 <1> all(): 查询所有结果<2> get(**kwargs): 返回与所给筛选条 ...

  2. django orm级联_Django数据表关联关系映射(一对一、一对多、多对多)

    我们知道涉及到数据表之间的对应关系就会想到一对一.一对多.多对多,在学习 MySQL 数据库时表关系设计是需要重点掌握的知识.Django 中定义了三种关系类型的字段用来描述数据库表的关联关系:一对多 ...

  3. django ORM相关的那些操作汇总

    必知必会13条 <1> all(): 查询所有结果<2> filter(**kwargs): 它包含了与所给筛选条件相匹配的对象<3> get(**kwargs): ...

  4. Django ORM

    Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/cou ...

  5. Django 优秀资源大全项目资源非 Python 包工具贡献

    Awesome Django 介绍 Awesome-Django 是由 Roberto Rosario 发起和维护的 Django 资源列表.该列表收集了大量 Django 相关的优秀应用.项目等资源 ...

  6. django mysql orm教程_带你了解Django ORM操作(基础篇)

    前言 在日常开发中,需要大量对数据库进行增删改查操作. 如果头铁的话,使用原生SQL是最好的,毕竟性能又高,又灵活. 但是通常情况下,我们不是太需要那么苛刻的性能,也没有那么多刁钻的需求用原生SQL ...

  7. Django ORM那些相关操作

    一般操作 https://docs.djangoproject.com/en/1.11/ref/models/querysets/         官网文档 常用的操作 <1> all() ...

  8. django ORM中的RelatedManager(关联管理器)

    关联管理器应用在 一对多的表 或者 多对多的表 多对多表中的用法: 在多对多的表中 正向查询 #基于对象的查询 #正查 # author_obj = Author.objects.get(id=1) ...

  9. Django ORM 知识点总结

    Query是如何工作的 Django QuerySet是懒执行的,只有访问到对应数据的时候,才会去访问数据库.另外如果你再次读取查询到的数据,将不会触发数据库的访问,而是直接从缓存获取. 比如 # 这 ...

  10. Django - ORM操作

    Django - ORM操作 一. 必知必会13条 单表查询之神奇的双下划线 二. ForeignKey操作 正向查找 反向操作 三. ManyToManyField 四. 聚合查询和分组查询 聚合 ...

最新文章

  1. mysql 加快命中_合理配置MySQL缓存 提高缓存命中率
  2. 两分钟彻底让你明白Android Activity生命周期(图文)!
  3. 016. Remove me test
  4. 计算机基础说课 word,计算机基础说课稿
  5. SQLite移植手记1
  6. JVM :Btrace监控工具
  7. 熊猫烧香病毒(jusodl.exe severe.exe conime.exe)及其变种病毒专杀
  8. uinty 为什么一旋转鼠标镜头就倒了_Unity3D使用鼠标旋转缩放平移视角
  9. 修改MAC地址的方法
  10. js转换php时间戳,js和PHP 时间戳与日期转换
  11. 最全面的PS快捷键使用指南(图文演示)
  12. R语言:lengths计算列表list中元素的个数
  13. 经典的大学学习生活心得
  14. 利用python进行prosper贷款数据EDA分析(一)
  15. MobaXterm - 远程连接工具
  16. 使用开源实时监控系统 HertzBeat 5分钟搞定 Mysql 数据库监控告警
  17. 百度飞桨AI抠图+图片合成
  18. Q2复苏慢,华米科技的“两条腿”还行吗?
  19. 【Dart 教程系列第 28 篇】Dart中的 Map 和实体类的相互转换
  20. MVVM和MVC模型

热门文章

  1. Excel实现多表关联查询-VLOOKUP
  2. 安踏的搜索引擎营销_案例:从安踏看IP跨界营销的内在逻辑
  3. Spire.Office for Java 7.10.FIX[7.9.9]-全新版
  4. 大大学校园计算机市场分析,笔记本电脑大学生市场调研报告
  5. CSS3的clac 没有效果,警告提示“invalid property value”
  6. Chaos Mesh® 的 Chaos Engineering as a Service 探索之路
  7. 为啥面试需要Aggressive?
  8. 宠物卡牌大赛奖励发放结束公告
  9. Learning from class-imbalanced data: Review of methods and applications 论文阅读
  10. 大数据笔记(三):HDFS集群搭建-伪分布式模式