下面定义两个模型,一个主表,一个字表。

举例说明:

如何通过主表对象找到对应的子表对象?

如何通过子表对象找到对应的主表对象?

class Person(models.Model);
name = models.CharField('作者姓名', max_length=10)
age = models.IntegerField('作者年龄') class Book(models.Model):
person = models.ForeignKey(Person,related_name='person_book')
title = models.CharField('书籍名称', max_length=10)
pubtime = models.DateField('出版时间')

上面的两个问题就对应变成了:

如何通过Person对象来找到对应的Book对象?

如何通过Book对象来找到对应的Person对象?

如何通过Person对象来找到对应的Book对象?

方法1:

  1. 先找到作者信息: persion = Person.objects.filter(过滤条件),返回以一个persion对象。

  2. 再查询与该person对象关联的书籍对象: book = person.book_set.all()

说明: django 默认每个主表的对象都有一个是外键的属性,可以通过它来查询到所有属于主表的子表的信息。这个属性的名称默认是以子表的名称小写加上_set()来表示,默认返回的是一个querydict对象,你可以继续的根据情况来查询等操作。
 

方法2:

使用related_name: 关联对象反向引用描述符。

在定义子表的外键的时候,给这个外键定义好一个名称。用related_name比如:
 
person = models.ForeignKey(Person, related_name='person_set')
那么可以根据定义的related_name的值可以 关联主表对象且反向引用 。
用book = person.person_set.all(), 代替方法1中的 book = person.book_set.all()
 
 
如何通过Book对象来找到对应的Person对象?
假如我先得到了一个子表的对象。那我只要获取该对象关联主表的外键,就可以得到主表的信息了。
比如我得到一个book对象,然后我想得到book对象的主表person的信息的话:
p = book.person

最新文章

  1. Revit 自定义RibbonPanel到Revit中
  2. BackgroundWorker组件的作用
  3. Rails :布局和视图渲染
  4. 给NIOS II CPU增加看门狗定时器并使用
  5. Java 利用初学知识 写出自己的名字
  6. Codeforces Round #257(Div.2) D Jzzhu and Cities --SPFA
  7. jQuery对下拉框Select操作总结
  8. 【转】MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突
  9. linux制作文件系统
  10. ASP.NET Web API 文件產生器 - 使用 Swagger
  11. 编译Qt 4.7.3的时候发生NMAKE : fatal error U1077: 'cd' : return code '0x2'
  12. cocos2dx 3.1从零学习(六)——CocosStudio(VS2013project导入及环境设置)
  13. 【转】UiAutomator简要介绍
  14. linux卸载rpm包
  15. iOS视频压缩处理
  16. arcgisserver成功发布服务后,浏览服务,无地图显示
  17. Docker入门之七Dockerfile
  18. 02、NetCore2.0优化之Nuget包
  19. VM克隆centos7虚拟机并配置网络
  20. 师兄带你轻松入门GitHub

热门文章

  1. Windows加密服务架构
  2. C#把大写英文变成小写英文,把小写英文变成大写英文
  3. Jquery+Aajax 批量上传
  4. redis(3)发布订阅
  5. MongoDB 学习(三)MongoDB 和 Spring 整合(Maven)
  6. 网站大于10M的视频不能播放
  7. 第8章 CSS3中的变形与动画(上)
  8. css 样式表集合
  9. SSIS 和 SSRS自制Template
  10. 如何定位 Node.js 的内存泄漏